【发布时间】:2014-01-01 08:50:21
【问题描述】:
我有一个数据库表,其记录如下所示,
ID ATTR_NAME ATTR_VALUE 1 ABC DEF 1 GHI JKL 1 MNO PQR我想得到一行
ID ABC GHI MNO 1 DEF JKL PQR【问题讨论】:
-
PL/SQL 不是一个选项?
-
PL SQL 不是一个选项
我有一个数据库表,其记录如下所示,
ID ATTR_NAME ATTR_VALUE 1 ABC DEF 1 GHI JKL 1 MNO PQR我想得到一行
ID ABC GHI MNO 1 DEF JKL PQR【问题讨论】:
它可能有点脆弱,而且没有经过验证的未来,但 Pivot 可以为您提供您想要的:
SELECT *
FROM (
SELECT attr_name, attr_value
FROM test
)
PIVOT
( MIN(attr_value)
FOR attr_name IN ( 'ABC','GHI','MNO' )
)
但是,我建议您考虑是否真的需要这种格式,看看是否能以更自然的格式输出。
【讨论】:
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;
【讨论】: