【SQL server】透视及分组

本文介绍了SQL中透视和逆透视的基本用法,并通过具体示例展示了如何使用UNPIVOT和PIVOT操作实现数据的转换。此外,还探讨了GROUP BY、GROUPING、ROLLUP/CUBE以及GROUPING_ID等函数的应用场景和技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--透视和逆透视
select  empid, A, B, C, D
from(
select empid ,custid,qty from seven_sale_orders
) as E
[un]pivot(sum(qty) for cusid in(A,B,C,D)) as P;

原表查询数据:


透视后的数据:




--子定义串联的数据
select * from seven_sale_orders
cross join (values('A'),('B'),('C'),('D')) as custs(custid);

select * from seven_sale_orders
cross join (select 'A' as custid
union all select 'B'
union all select 'C'
union all select 'D') as custs;

/*
分组集:
group by:结合合计,根据一列或多列进行分组。
grouping:指示是否聚合group by列表中的指定列表表达式。如grouping返回1则聚合;返回0则不聚合。
rollup/cube:生成简单的group by集合行及小计行或超聚行,还生成一个总计行。rollup选取的列从左到右的进行聚行,cube则从左到右,其生成的小计和超计在总计行之后。
grouping_id 获取当列的汇总的列数(当前汇总在哪列吧,不好说直接上图)
*/
select empid,custid,orderdate,sum(qty) as sumqty from seven_sale_orders
group by cube(empid,custid,orderdate);
--分组集合
select empid,custid,sum(qty) as sumqty from seven_sale_orders
group by
grouping sets
(
(empid ,custid),(empid)--根据此进行分组计算汇总
)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值