纵向结构的数据转换为横向结构的数据

本文通过具体的SQL语句展示了如何创建表格、插入数据并进行分组汇总统计。涉及年度奖惩情况的数据分析,包括各类奖惩的次数及金额总和。

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

create table t(奖惩 varchar(8),次数 int,金额 int,年度 char(4))
insert t
select '大功',2,360,'2002' union all
select '小功',17,1020,'2002' union all
select '小功',3,360,'2002' union all
select '大功',9,1620,'2003' union all
select '嘉獎',2,80,'2003' union all
select '警告',25,-500,'2003' union all
select '警告',1,-40,'2003' union all
select '大功',1,180,'2004' union all
select '嘉獎',12,240,'2004' union all
select '嘉獎',2,80,'2004' union all
select '警告',18,-360,'2004' union all
select '警告',1,-40,'2004' union all
select '大功',3,540,'2005' union all
select '小功',7,420,'2005' union all
select '小過',11,-660,'2005'
go

declare @s varchar(8000)
set @s='select isnull(年度,''合计'') as [年度]'
select @s=@s+',['+奖惩+']=sum(case 奖惩 when '''+奖惩+''' then 金额 else 0 end)'+
',['+奖惩+'次数]=sum(case 奖惩 when '''+奖惩+''' then 1 else 0 end)'
from t group by 奖惩
set @s=@s+',合计=sum(金额) from t group by 年度 with rollup'
exec(@s)
/*

年度   大功       大功次数   嘉獎     嘉獎次数   警告   警告次数   小功  小功次数   小過  小過次数    合计          
---- ----------- -------- --------- --------- -------- --------- ------ -------- ---------------------
2002 360         1         0         0         0       0         1380   2        0      0        1740
2003 1620        1         80        1         -540    2         0      0        0      0        1160
2004 180         1         320       2         -400     2        0      0        0      0        100
2005 540         1         0         0         0        0        420    1        -660   1        300
合计 2700        4         400       3         -940     4        1800   3        -660   1        3300


*/

drop table t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值