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 BY
与GROUPING 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 BY
带ROLLUP
,CUBE
和GROUPING 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 中的结果
归档时间: |
|
查看次数: |
7006 次 |
最近记录: |