【问题标题】:Grouping Sets, Roll-up but with multiple columns分组集,汇总但具有多列
【发布时间】:2019-09-29 09:50:16
【问题描述】:

我有一个产生以下结果的查询。我遇到的问题是如何在底部创建 3 行,显示 >=14 天的总数,然后是 1-13 天的总数。

select
[Period],
[Person],
count(*) as NumberOfRecords,
sum([Amount]) as [Amount]

如果我执行以下操作并排除此人,我会得到一个总体总数,但我还需要显示此人:

GROUP BY GROUPING SETS(([[Period]),());

这是怎么做到的?

Create table #temp
(
    Period varchar(50),
    Person varchar(100),
    NumberOfRecords int,
    Amount money
)

insert into #temp
(
    Period,
    Person,
    NumberOfRecords,
    Amount
)
select
    '>= 14 days','',3,100
union all
select
    '>= 14 days','John Smith',32,200
union all
select
    '>= 14 days','Joe Bloggs',50,400
union all
select
    '>= 14 days','Jane Doe',52,750
union all
select
    '>= 14 days','Barry Knight',46,1000
union all
select
    '1-13 days','Bob the Builder',331,7500

【问题讨论】:

    标签: sql sql-server tsql rollup


    【解决方案1】:

    您可以使用ROLLUP 进行小计。

    SELECT
        CASE WHEN GROUPING(Period) = 1 THEN 'Total' ELSE Period END Period, 
        Person, SUM(NumberOfRecords) NumberOfRecords, 
        SUM(Amount) Amount 
    from #temp
    GROUP BY ROLLUP ((Period),(Period, Person))
    ORDER BY GROUPING(Period), GROUPING(Person)
    

    结果:

    Period               Person               NumberOfRecords Amount
    -------------------- -------------------- --------------- ---------------------
    >= 14 days                                3               100.00
    >= 14 days           Barry Knight         46              1000.00
    >= 14 days           Jane Doe             52              750.00
    >= 14 days           Joe Bloggs           50              400.00
    >= 14 days           John Smith           32              200.00
    1-13 days            Bob the Builder      331             7500.00
    1-13 days            NULL                 331             7500.00
    >= 14 days           NULL                 183             2450.00
    Total                NULL                 514             9950.00
    

    【讨论】:

      【解决方案2】:

      虽然你可以使用ROLLUP,但我是GROUPING SETS的粉丝:

      GROUP BY GROUPING SETS( (Period, Person), (Period), () );
      

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 2018-02-28
        • 2022-01-15
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        • 2018-03-17
        • 1970-01-01
        相关资源
        最近更新 更多