-1

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

这是我的桌子:

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
4

2 回答 2

2

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

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;
于 2021-11-15T16:25:05.010 回答
0

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

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;
于 2021-11-15T16:32:15.933 回答