我有一个将行转换为列的查询。如果存在值,则仅存在行,例如,没有具有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不需要一整套结果来构建输出网格?
答案 0 :(得分:0)
这一行:<head>
为表where fs.field_id = s.id_field
中的每一行设置了该行
必须在派生表custom_field_str
中存在行。所以你可以把你的查询改成简单的join-version,这是我的尝试:
fs