CREATE table [Test] (
[ID] [int] IDENTITY (1,1) NOT NulL,
[name] [nvarchar] (50) ColLATE Chinese_PRC_CI_AS NulL,
[subject] [nvarchar] (50) ColLATE Chinese_PRC_CI_AS NulL,
[Source] [numeric](18,0) NulL
) ON [PRIMARY]
GO
INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'语文',60)
INSERT INTO [test] ([name],[Source]) values (N'李四',N'数学',70)
INSERT INTO [test] ([name],[Source]) values (N'王五',N'英语',80)
INSERT INTO [test] ([name],75)
INSERT INTO [test] ([name],57)
INSERT INTO [test] ([name],100)
Go
SELECT * FROM TEST
ID name SUBJECT SOURCE
1 张三 语文 60
2 李四 数学 70
3 王五 英语 80
4 王五 数学 75
5 王五 语文 57
6 李四 语文 80
7 张三 英语 100
一.确定列,查询交叉表
SELECT A.name,
SUM(CASE SUBJECT WHEN '语文' THEN SOURCE ELSE 0 end) as 语文,
SUM(CASE SUBJECT WHEN '数学' THEN SOURCE ELSE 0 end) as 数学,
SUM(CASE SUBJECT WHEN '英语' THEN SOURCE ELSE 0 end) as 英语
FROM test as A
group by a.name
reslut:
name 语文 数学 英语
李四 80 70 0
王五 57 75 80
张三 60 0 100
二.列数不确定,需要声明变量来获取要列出的科目.
declare @sql varchar(8000)
set @sql = 'select name,'
select @sql = @sql + 'sum(case subject when '''+subject+'''
then source else 0 end) as '''+subject+''','
from (select distinct subject from test) as a
select @sql = left(@sql,len(@sql)-1) + ' from test group by name'
exec(@sql)
go 总结
以上是内存溢出为你收集整理的交叉表的概念及sql中交叉表的使用全部内容,希望文章能够帮你解决交叉表的概念及sql中交叉表的使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)