【问题标题】:How to sum up two unique records and display it as a new record-OracleSQL?如何将两条唯一记录相加并显示为一条新记录——OracleSQL?
【发布时间】:2021-12-26 20:23:03
【问题描述】:

我正在尝试合并表中的两条记录,然后将其表示为新记录。

这是我的桌子:

date|flag|bu|volume|calls
14-Nov-21,1,accounting,50,10
14-Nov-21,2,InfoSec,111,106
14-Nov-21,3,IT,500,100
14-Nov-21,4,management,70,60
14-Nov-21,5,consulting,5,45

我希望表格在我运行查询时看起来像这样:

date|flag|bu|volume|calls
14-Nov-21,1,accounting,50,10
14-Nov-21,2,InformationTechnology,611,206
14-Nov-21,4,management,70,60
14-Nov-21,5,consulting,5,45

如您所见,我将 InfoSec 和 IT 记录合并为一个新记录。有关如何执行此操作的任何想法或建议?

到目前为止,我的查询如下所示:

with bc as (select * from table1)
select date,flag,case when bu='IT' and bu='InfoSec' then 'InformationTechnology' else bu end as bu,volume,calls

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    您可以使用将InfoSecIT 放入同一个存储桶的CASE 表达式进行聚合:

    SELECT
        date,
        CASE WHEN flag IN (2, 3) THEN 2 ELSE flag END AS flag,
        CASE WHEN bu IN ('InfoSec', 'IT') THEN 'InformationTechnology'
             ELSE bu END AS bu,
        SUM(volume) AS volume,
        SUM(calls) AS calls
    FROM table1
    GROUP BY
        date,
        CASE WHEN flag IN (2, 3) THEN 2 ELSE flag END,
        CASE WHEN bu IN ('InfoSec', 'IT') THEN 'InformationTechnology'
             ELSE bu END;
    

    【讨论】:

      【解决方案2】:

      您需要一个合并bu 的两个值的CASE 表达式:

      SELECT date,
             MIN(flag) flag,
             CASE 
               WHEN bu IN ('InfoSec', 'IT') THEN 'InformationTechnology'
               ELSE bu 
             END bu,
             SUM(volume) volume,
             SUM(calls) calls
      FROM tablename
      GROUP BY date,
               CASE 
                 WHEN bu IN ('InfoSec', 'IT') THEN 'InformationTechnology'
                 ELSE bu 
               END;
      

      【讨论】:

        猜你喜欢
        • 2017-02-24
        • 2019-02-18
        • 1970-01-01
        • 2021-04-14
        • 2021-11-05
        • 2020-07-07
        • 2017-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多