我遇到了困难的要求(我是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中构建它。
提前致谢。
答案 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)
);