交叉表的概念及sql中交叉表的使用

交叉表的概念及sql中交叉表的使用,第1张

概述交叉表是一种常用的分类汇总表格。使用交叉表查询,显示源于表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部。行和列的交叉处可以对数据进行多种汇总计算,如:求和、平均值、记数、最大值、最小值等。使用交叉表查询数据非常直观明了,被广泛应用。交叉表查… 交叉表是一种常用的分类汇总表格。使用交叉表查询,显示源于表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部。行和列的交叉处可以对数据进行多种汇总计算,如:求和、平均值、记数、最大值、最小值等。使用交叉表查询数据非常直观明了,被广泛应用。交叉表查询也是数据库的一个特点。

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中交叉表的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157031.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存