时间:2021-07-01 10:21:17 帮助过:4人阅读
先利用case when then else end 语句将行转为列:
select [name],[语文]=sum(case when subject=‘语文‘ then score else null end),
[数学]=sum(case when subject=‘数学‘ then score else null end),
[外语]=sum(case when subject=‘外语‘ then score else null end)
from studentscore group by [name]
查询结果:
李四 80 90 85
王五 70 71 75
张三 60 65 70
赵六 64 67 76
以上查询作用也很大,对于很多情况,比如产品销售表中按照季度统计、按照月份统计等列头内容固定的情况,这样就行了,但往往大多数情况下列头内容是不固定的,象City,用户随时可能删除、添加一些城市,这种情况就是我们所说的动态交叉表,这个时候需要拼下SQL语句了。
SQLServer中局部变量赋值方法
有两种:
一种: set @变量名 = 值
二种: select @变量名 = 值
第二种可以从某个表中得到数据再赋值给变量
例: 从用户信息表中查询中cid为 20 的用户姓名将他赋值给变量 name
declare @name varchar(10) --用户名
select @name=userName from userInfo where cid = 20
print ‘cid为20的用户姓名:‘ + @name
递归的select变量:
递归的select变量是指使用select语句和子查询将一个变量与其自身拼接起来。语法形式如下:select @variable = @variable + table.column from table
declare @sql varchar(max)
set @sql = ‘select [name],‘
select @sql = @sql + ‘sum(case subject when ‘‘‘+subject+‘‘‘
then score else null end) as ‘‘‘+subject+‘‘‘,‘
from (select distinct subject from studentscore) as a
select @sql = left(@sql,len(@sql)-1) + ‘ from studentscore group by [name]‘
exec(@sql)
执行结果:
李四90
85 80
王五 71 75 70
张三 65 70 60
赵六 67 76 64
MS SQLServer 交叉报表(行列互换)
标签: