描述:
三个表: 表A,表B,表C,其中A表中F_DID和B表中F_DID均为外键,A表中F_ID为主键,最后视图中显示的结果是,如果A表中F_DID的一个值对应有几条数据则视图中就有几个Value字段,如图中所示。
表A 
F_ID    F_DID F_Name
02010101 020101 Test0
02010102 020101 Test1
表BF_DID F_Keyword
020101 123456
表CF_Keyword F_ID   F_Value
123456 02010101 100
123456 02010102 200
视图F_DID F_Keyword F_02010101_Value F_02010102_Value
020101 123456        100                              200

解决方案 »

  1.   

    wildwave的通用行列转换
      

  2.   

    没搞过,但是遇到这种逻辑用java代码搞应该不是神马难事.
      

  3.   


    SQL> with a as(
      2       select '02010101' f_id,'020101' f_did,'Test0' f_name from dual union all
      3       select '02010102','020101','Test1' from dual)
      4  ,b as(
      5     select '020101' f_did,'123456' F_Keyword from dual)
      6  ,c as(
      7     select '123456' F_Keyword,'02010101' F_ID,100 F_Value from dual union all
      8     select '123456','02010102',200 from dual)
      9  select b.f_did,b.f_keyword,
     10         max(decode(c.f_id,'02010101',c.f_value)) F_02010101_Value,
     11         max(decode(c.f_id,'02010102',c.f_value)) F_02010102_Value
     12  from a,b,c
     13  where b.f_did=a.f_did
     14    and b.f_keyword=c.f_keyword
     15  group by b.f_did,b.f_keyword
     16  /
     
    F_DID  F_KEYWORD F_02010101_VALUE F_02010102_VALUE
    ------ --------- ---------------- ----------------
    020101 123456                 100              200
    oracle create view语法