【问题标题】:Single grand total ROLLUP with multiple columns具有多列的单个总计 ROLLUP
【发布时间】:2023-03-14 02:02:01
【问题描述】:

我希望在我的表中添加一个工资总额,该表也是基于多个列的选择。我坚持的代码如下:

SELECT country, state1, city, street, ID, lastname + ', ' + firstname AS 'Name', SUM(salary) AS 'AnnualSalary'
FROM geography1 JOIN address ON street = streetname JOIN employee ON ID = PID
WHERE termdate IS NULL
GROUP BY country, state1, city, street, gender, lastname, firstname

UNION ALL

SELECT COALESCE(country,'TOTAL'), NULL AS state1, NULL AS city, NULL AS street, NULL AS gender, NULL AS lastname, NULL AS lastname, SUM(salary) AS 'AnnualSalary'
FROM geography1 JOIN address ON street = streetname JOIN employee ON ID = PID
WHERE termdate IS NULL
GROUP BY ROLLUP(country);

执行上述查询以包括按国家总计分组的总计和其他行,但随后的其他列为空。有没有办法重写它以便只有一个总计行?

对于我对这件事如此陌生,我提前道歉。我看过其他问题,这就是我能够拼凑起来的。谢谢!

【问题讨论】:

    标签: sql tsql grouping union rollup


    【解决方案1】:

    您可以使用grouping sets 控制分组。如果您想要您拥有的组加上国家/地区的总数和总体总数,那么:

    SELECT country, state1, city, street, ID, lastname + ', ' + firstname AS Name,
           SUM(salary) AS 'AnnualSalary'
    FROM geography1 JOIN
         address
         ON street = streetname JOIN 
         employee ON ID = PID
    WHERE termdate IS NULL
    GROUP BY GROUPING SETS ( (country, state1, city, street, gender, lastname, firstname), (country), () );
    

    【讨论】:

    • 这正是我正在寻找的。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2019-08-27
    相关资源
    最近更新 更多