获取一行中多行的列

时间:2013-12-13 14:34:08

标签: sql oracle11g pivot

我有一个DB表,其记录如下所示,

ID   ATTR_NAME   ATTR_VALUE 
1    ABC          DEF
1    GHI          JKL
1    MNO          PQR

我希望得到一行

ID  ABC GHI  MNO
1   DEF JKL  PQR

2 个答案:

答案 0 :(得分:0)

它可能有点脆弱,而不是未来的证明,但Pivot可以给你你想要的东西:

SELECT *
FROM (
   SELECT attr_name, attr_value
   FROM   test
)
PIVOT
(  MIN(attr_value)
   FOR attr_name IN ( 'ABC','GHI','MNO' )
)

但是,我建议你考虑一下你是否真的需要这种格式,看看你是否能以更自然的格式把它拿出来。

答案 1 :(得分:0)

select ID, 
   sum(case when attr_name = 'ABC' then attr_value end) as ABC, 
   sum(case when attr_name = 'GHI' then attr_value end) as GHI, 
   sum(case when attr_name = 'MNO' then attr_value end) as MNO
from DB
group by ID;