【问题标题】:Sql query to merge multiple records for particular key into single record用于将特定键的多个记录合并为单个记录的 Sql 查询
【发布时间】:2015-08-09 15:38:37
【问题描述】:

我遇到了一个困难的要求(我是 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 中构建它。

提前致谢。

【问题讨论】:

标签: sql oracle pivot oracle-adf


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

【讨论】:

    【解决方案2】:

    我更喜欢 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)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 2021-04-07
      相关资源
      最近更新 更多