SQL 表中任意3字段生成2围报表

本文介绍了如何使用SQL语句,通过CASE语句和动态SQL,将原始表格按照多个字段进行统计,生成2维报表。提供了一个具体的例子,展示了如何将学生的科目成绩转换为姓名、各科成绩、平均分和总分的报表形式。

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

【方法】
declare @sql nvarchar(4000)
set @sql = 'select 竖排分类 as ' + '别名'
select @sql = @sql + ' , max(case 横排分类 when ''' + 横排分类 + ''' then 统计内容 else 0 end) [' + 横排分类 + ']'
from (select distinct 横排分类  from 表 where 条件语句) as a
set @sql = @sql + ' from 表 where 条件语句 group by 竖排分类 '
exec(@sql)

【实例】
原始表:
Name Subject Result
张三     语文  74
张三     数学  83
张三     物理  93
李四     语文  74
李四     数学  84
李四     物理  94
欲转换效果:
姓名         数学        物理        语文        平均分            总分         
--------------------------------------------------------------------------
李四         84          94          74          84.00                252
张三         83          93          74          83.33                250

实现代码:
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
exec(@sql)


理论基础:http://blog.sina.com.cn/s/blog_40ac71670100b26h.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值