将行作为列返回

时间:2011-08-16 00:48:35

标签: sql oracle oracle10g pivot

我喜欢将它作为单个查询来完成,但我认为它需要一个游标。如果我不能将它作为单个查询执行,我想将结果输出为SYS_REFCURSOR。一个简化的例子:

产品

ID   NAME         Part Number   SKU
------------------------------------
1    Widgetizer     150         1001
2    Widgetizer200  200         1002
3    WidgetizerDlx  250         1003

PRODUCT_SPEC

P_ID   NAME     VALUE
----------------------------
1      WEIGHT    5
1      HEIGHT    10
1      VERSION   1
1      COLOR     RED
2      WEIGHT    7
2      HEIGHT    10
2      VERSION   2
2      COLOR     BLUE

查询:

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

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

1 个答案:

答案 0 :(得分:5)

通常称为透视查询。

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
相关问题