使用Pivot查询的内部或外部联接

时间:2015-07-10 02:00:27

标签: oracle pivot

我有一个将行转换为列的查询。如果存在值,则仅存在行,例如,没有具有NULL

表示的值的行
Object Field_id    value
1      1           value1
1      2           value2
1      3           value3
2      2           value4

我创建了输出

Object  field1  field2  field3
1       value1  value2  value3
2               value4

使用类似

的查询
select * from 
    (
        select fs.field_name,  s.text_value, s.id_object 
          from custom_field_str s  , 
        (select  ad.id_field field_id, fd.name field_name, 
num_display_order display_order, ad.text_table_name catalogue_table, ad.num_lines 
           from catalogues c 
          inner join attribute_definitions ad on c.id_object = ad.id_object_type 
          inner join field_definitions fd on ad.id_field = fd.id_object 
          where c.id_object = 'cA1') fs 
        where fs.catalogue_table = 'custom_field_str' 
          and fs.field_id = s.id_field 
    )
pivot 
    ( max(text_value)  
for field_name IN ('field1' as  field1,'field2' as  field2,'field3' as  field3)  )

所以我的问题是,我应该在custom_field_str和派生表fs之间的连接中使用外连接。或者PIVOT不需要一整套结果来构建输出网格?

1 个答案:

答案 0 :(得分:0)

这一行:<head>为表where fs.field_id = s.id_field中的每一行设置了该行 必须在派生表custom_field_str中存在行。所以你可以把你的查询改成简单的join-version,这是我的尝试:

SQLFiddle

fs
相关问题