【问题标题】:Fetching Columns of a multiple rows in one row在一行中获取多行的列
【发布时间】: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 不是一个选项

标签: sql oracle11g pivot


【解决方案1】:

它可能有点脆弱,而且没有经过验证的未来,但 Pivot 可以为您提供您想要的:

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

但是,我建议您考虑是否真的需要这种格式,看看是否能以更自然的格式输出。

【讨论】:

    【解决方案2】:
    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多