Sql查询将特定键的多个记录合并为单个记录

时间:2015-08-09 15:38:38

标签: sql oracle pivot oracle-adf

我遇到了困难的要求(我是sql的新手,要求也可以很简单)在哪里我需要将表中特定键可用的多个记录合并为单个记录(我想要显示它)单排)。

例如假设我有表格ABC以及以下数据

表ABC

  CODE    TRANS_CODE     AMOUNT
    01      01            123
    01      02            456
    01      03            678
    01      04            889

这里我想将CODE = 01的所有记录显示为单行,如下所述

 CODE       AMOUNT1    AMOUNT2   AMOUNT3  AMOUNT4
  01          123        456      678       889

这意味着对于CODE = 01和TRANS_CODE = 01,AMOUNT的值需要显示在AMOUNT1列中,类似于CODE = 01,而TRANS_CODE = 02则AMOUNT的值需要显示在AMOUNT2列中,等等。

注意:只有5个TRANS_CODE(01,02,03,04,05),因此对于每个CODE,将有5条记录,我需要合并到单个记录中,如上所述。

如果我知道如何为此构建sql查询,那将会很棒。我需要在Oracle ADF中构建它。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用条件聚合执行此操作:

select code,
       max(case when trans_code = '01' then amount end) as amount1,
       max(case when trans_code = '02' then amount end) as amount2,
       max(case when trans_code = '03' then amount end) as amount3,
       max(case when trans_code = '04' then amount end) as amount4,
       max(case when trans_code = '05' then amount end) as amount5
from ABC t
group by code;

答案 1 :(得分:1)

我更喜欢PIVOT子句,因为它明确地做了你想要的:

SELECT * FROM 
(
  SELECT 
    Code, 
    Trans_Code,  
    Amount
  FROM
    abc
)
PIVOT (
  SUM(Amount) 
  FOR TRANS_CODE in (
       '01' AS Amount1, 
       '02' AS Amount2, 
       '03' AS Amount3, 
       '04' AS Amount4, 
       '05' AS Amount5)
);