Sql 将行作为列返回

Sql 将行作为列返回,sql,oracle,oracle10g,pivot,Sql,Oracle,Oracle10g,Pivot,我很想把它作为一个查询,但我认为它需要一个游标。如果不能作为单个查询来执行,我希望将结果输出为SYS\u REFCURSOR。一个简化的例子: 产品 产品规格 查询: 对于SKU小于1003的每个产品,返回: Product name, part #, SKU, WEIGHT, HEIGHT, COLOR 通常称为透视查询 select p.name, p.partnum, p.sku, max( case when s.name='WEIGHT' then s.value el

我很想把它作为一个查询,但我认为它需要一个游标。如果不能作为单个查询来执行,我希望将结果输出为SYS\u REFCURSOR。一个简化的例子:

产品 产品规格 查询:

对于SKU小于1003的每个产品,返回:

Product name, part #, SKU, WEIGHT, HEIGHT, COLOR

通常称为透视查询

select p.name, p.partnum, p.sku,
       max( case when s.name='WEIGHT' then s.value else null end ) weight,
       max( case when s.name='HEIGHT' then s.value else null end ) height,
       max( case when s.name='COLOR'  then s.value else null end ) color
from product p join product_spec s on p.id = s.p_id
where sku <= 1003
group by p.name, p.partnum, p.sku
选择p.name、p.partnum、p.sku、,
最大(s.name='WEIGHT'然后s.value else null end时的情况)重量,
最大(s.name='HEIGHT'然后s.value else null end时的情况)高度,
最大(s.name='COLOR'然后s.value else null end时的情况)颜色
从产品p连接p.id上的产品规格=s.p\U id

其中sku通常称为透视查询

select p.name, p.partnum, p.sku,
       max( case when s.name='WEIGHT' then s.value else null end ) weight,
       max( case when s.name='HEIGHT' then s.value else null end ) height,
       max( case when s.name='COLOR'  then s.value else null end ) color
from product p join product_spec s on p.id = s.p_id
where sku <= 1003
group by p.name, p.partnum, p.sku
选择p.name、p.partnum、p.sku、,
最大(s.name='WEIGHT'然后s.value else null end时的情况)重量,
最大(s.name='HEIGHT'然后s.value else null end时的情况)高度,
最大(s.name='COLOR'然后s.value else null end时的情况)颜色
从产品p连接p.id上的产品规格=s.p\U id

如果sku太差,您不能使用Oracle引入pivot查询的11g()可能重复的太差,您不能使用Oracle引入pivot查询的11g()可能重复的EAV工资正在编写非常粗糙的查询。EAV的工资正在编写非常粗糙的查询。
select p.name, p.partnum, p.sku,
       max( case when s.name='WEIGHT' then s.value else null end ) weight,
       max( case when s.name='HEIGHT' then s.value else null end ) height,
       max( case when s.name='COLOR'  then s.value else null end ) color
from product p join product_spec s on p.id = s.p_id
where sku <= 1003
group by p.name, p.partnum, p.sku