sql server 获取每个组的总数

hey*_*Now 4 sql-server group-by

不知道该怎么做:-

我有一个查询

select name, city, salary from Employee

我可以通过分组得到一个总和

select name, city, sum(salary) total_salary from Employee group by name, city

如何将每个城市的总数作为每个城市下的单独一行?

预期样本结果:

Name City Salary
n1   c1   10
n2   c1   20
T1   c1   30
n3   c2   20
n4   c2   50
T2   c2   70
Run Code Online (Sandbox Code Playgroud)

ype*_*eᵀᴹ 13

您可以GROUP BYGROUPING SETS ()修饰符一起使用:

select name, city, sum(salary) total_salary 
from Employee 
group by grouping sets ((city, name), (city)) ;
Run Code Online (Sandbox Code Playgroud)

从微软的Technet使用示例:使用GROUP BYROLLUPCUBEGROUPING SETS


RDF*_*ozz 12

WITH ROLLUP 会接近你想要的:

select name, city, sum(salary) total_salary
  from Employee
 group by city, name WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

这会给你:

Name City Salary
n1   c1   10
n2   c1   20
NULL c1   30
n1   c2   20
n2   c2   50
NULL c2   70
NULL NULL 100
Run Code Online (Sandbox Code Playgroud)

如果您不想要 NULL,则可以替换它们。该GROUPING函数会告诉您列何时由于ROLLUP; 而为 NULL 。

select CASE WHEN GROUPING(city) = 1 THEN 'Grand'
            WHEN GROUPING(name) = 1 THEN 'Total'
            ELSE name END as name
      ,CASE WHEN GROUPING(city) = 1 THEN 'Total'
            ELSE city END as city
      ,sum(salary) total_salary
  from Employee
 group by city, name WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

查看此SQLFiddle 中的结果