繁体   English   中英

TSQL:如何添加总计行

[英]TSQL: How to add a totals row

我使用的是SQL Server 2014,并且具有带有不同总计列的建筑物ID的列表。 我要为建筑物添加一行总计。

可以在SQL中完成以下所需的输出吗? 如果是这样,最好的方法是什么? 我需要针对各种项目学习如何做到这一点。 我不需要LevelID总计,仅需要其他列,而且我不确定是否可以在总计行中添加文本“ BuildingTotal”。

所需输出:

在此处输入图片说明

SQL提琴:

这是测试表的代码,以防SQL Fiddle无法正常工作。

CREATE TABLE EMPLOYEES
(
BuildingID Numeric,
LevelID Numeric,
FemaleEmp Numeric,
MaleEmp Numeric,
TotalEmpByLevel Numeric
)

INSERT INTO EMPLOYEES
(BuildingID, LevelID, FemaleEmp, MaleEmp, TotalEmpByLevel)
VALUES 
(111, 1,91, 89, 180),
(111, 2,98, 94, 192),
(111, 3,94, 113 , 207),
(111, 4,110, 119, 229),
(111, 5,107, 9, 203),
(113, 1,53, 4, 101),
(113, 2,51, 5, 106),
(113, 3,68, 5, 119),
(113, 4,58, 6, 118),
(113, 5,57, 6, 117),
(114, 1,25, 3, 56 ),
(114, 2,26, 3, 63 ),
(114, 3,32, 2, 61 ),
(114, 4,27, 3, 58 ),
(114, 5,26, 2, 49 ),
(116, 1,84, 102 , 186),
(116, 2,83, 92, 175),
(116, 3,89, 87, 176),
(116, 4,71, 91, 162),
(116, 5,87, 72, 159)

谢谢您的帮助!

尝试按汇总分组

这是示例链接

一种方法是使用分组集或汇总。 不过,这需要一些技巧。 您需要一个聚合查询:

select BuildingId, LevelId, sum(FemaleEmp) as FemaleEmp,
       sum(MaleEmp) as MaleEmp, sum(TotalEmpByLevel) as TotalEmpByLevel
from employees
group by grouping sets((BuildingId, LevelId), (BuildingId));

您可以在行中添加单词Total 这有点棘手,因为类型不同:

select (case when grouping(LevelId) = 1 then 'Building Total' else cast(BuildingId as varchar(255)) end) as BuildingId,
       LevelId, sum(FemaleEmp) as FemaleEmp,
       sum(MaleEmp) as MaleEmp, sum(TotalEmpByLevel) as TotalEmpByLevel
from employees
group by grouping sets((BuildingId, LevelId), (BuildingId));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM