首页 > 解决方案 > 对 2 列求和并合并行

问题描述

主键是reportdate,market,platform. 如果我得到 2 条或多条记录,我想对 row_num = 1 的imprandleads列求和并删除 row_num = 2 (我想出了删除部分,但仍在尝试求和部分)。

如何求和imprleads列以获得所需的输出,如下所示。

这些是我的输入记录:

reportdate      market  platform    impr            leads   create_date       file_id   row_num
2020-05-16      TX      quote       0.00000         7.00000     2020-06-11      11345   1
2020-05-16      TX      quote       600.00000       0.00000     2020-06-11      11345   2
2020-05-16      CA      street      50.00000        0.00000     2020-06-11      11345   1
2020-05-16      CA      street       0.00000        4.00000     2020-06-11      11345   2
2020-05-16      PA      unknown     0.00000         7.00000     2020-06-11      11345   1
2020-05-16      PA      unknown     600.00000       0.00000     2020-06-11      99999   2

我想查看记录作为我的输出:

reportdate      market  platform    impr            leads   create_date       file_id   row_num
2020-05-16      TX      quote       600.00000       7.00000     2020-06-11      11345   1
2020-05-16      CA      street      50.00000        4.00000     2020-06-11      11345   1
2020-05-16      PA      unknown     0.00000         7.00000     2020-06-11      11345   1
2020-05-16      PA      unknown     600.00000       0.00000     2020-06-11      99999   2

标签: sqlsql-serversql-server-2012

解决方案


这是聚合或窗口函数。

对于您当前的数据集,聚合就足够了:

select
    reportdate,
    market, 
    platform,
    sum(impr) impr,
    sum(leads) leads,
    create_date,
    file_id,
    min(row_num) row_num
from mytable
group by
    reportdate,
    market, 
    platform,
    create_date,
    file_id

另一方面,如果您在列中具有不同的值,例如file_idcreate_date对于给定的(reportdate, market, platform)元组,那么您将需要使用窗口函数:

select *
from (
    select 
        reportdate,
        market, 
        platform,
        sum(impr) over(partition by reportdate, market, platform) impr,
        sum(leads) over(partition by reportdate, market, platform) leads,
        create_date,
        file_id,
        row_num,
        row_number() over(partition by reportdate, market, platform order by row_num) rn
    from mytable
) t
where rn = 1

推荐阅读