wad*_*rld 0 sql oracle pivot oracle10g
我喜欢将它作为单个查询来做,但我认为它需要一个游标.如果我不能将它作为单个查询执行,我想将结果输出为SYS_REFCURSOR.一个简化的例子:
ID NAME Part Number SKU
------------------------------------
1 Widgetizer 150 1001
2 Widgetizer200 200 1002
3 WidgetizerDlx 250 1003
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
查询:
对于SKU小于1003的每种产品,请返回:
Product name, part #, SKU, WEIGHT, HEIGHT, COLOR
Run Code Online (Sandbox Code Playgroud)
通常称为数据透视查询.
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
Run Code Online (Sandbox Code Playgroud)