SQL 二维交叉报表 分类统计(行列转换)
来源:互联网 发布:jquery json remove 编辑:程序博客网 时间:2024/04/19 05:36
/*
需要统计成以下形式
总 总分 数学 总分 语文 总分
李四 10 820 6 483.50 4 336.50
张三 10 829 7 595.50 3 233.50
总 总分 数学 总分 语文 总分
李四 10 820 6 483.50 4 336.50
张三 10 829 7 595.50 3 233.50
ID Name Class Mark Term
1 张三 数学 80.50 2001
2 张三 数学 82.50 2002
3 张三 数学 83.50 2003
4 张三 数学 84.50 2004
5 张三 数学 90.00 2005
6 张三 数学 84.50 2006
7 张三 数学 90.00 2007
8 张三 语文 80.50 2001
9 张三 语文 82.50 2002
10 张三 语文 70.50 2003
11 李四 数学 84.50 2000
12 李四 数学 80.50 2001
13 李四 数学 60.50 2002
14 李四 数学 83.50 2003
15 李四 数学 84.50 2004
16 李四 数学 90.00 2005
17 李四 语文 80.50 2001
18 李四 语文 82.50 2002
19 李四 语文 83.50 2003
20 李四 语文 90.00 2005
1 张三 数学 80.50 2001
2 张三 数学 82.50 2002
3 张三 数学 83.50 2003
4 张三 数学 84.50 2004
5 张三 数学 90.00 2005
6 张三 数学 84.50 2006
7 张三 数学 90.00 2007
8 张三 语文 80.50 2001
9 张三 语文 82.50 2002
10 张三 语文 70.50 2003
11 李四 数学 84.50 2000
12 李四 数学 80.50 2001
13 李四 数学 60.50 2002
14 李四 数学 83.50 2003
15 李四 数学 84.50 2004
16 李四 数学 90.00 2005
17 李四 语文 80.50 2001
18 李四 语文 82.50 2002
19 李四 语文 83.50 2003
20 李四 语文 90.00 2005
*/
CREATE TABLE temp(
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Class] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Mark] [numeric](18, 2) NULL,
[Term] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_temp] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','84.5','2004')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','90','2005')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','84.5','2006')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','90','2007')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','70.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','84.5','2000')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','60.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','84.5','2004')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','90','2005')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','90','2005')
DECLARE @sql varchar(2000)
set @sql=''
select @sql=@sql + ',class',count(id),sum(Mark) from temp
group by Name,class
declare @sql varchar(8000)
set @sql = 'select name,count(name) as 总,sum(mark) as 总分'
select @sql = @sql + ',count(case class when '''+class+''' then name end)['+class+'总数] ,sum(case class when '''+class+''' then mark end) ['+class+']'
from (select distinct class from temp) as s
select @sql = @sql+' from temp group by name'
select @sql
exec(@sql)
--drop table temp
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Class] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[Mark] [numeric](18, 2) NULL,
[Term] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_temp] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','84.5','2004')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','90','2005')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','84.5','2006')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','数学','90','2007')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('张三','语文','70.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','84.5','2000')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','60.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','84.5','2004')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','数学','90','2005')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','80.5','2001')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','82.5','2002')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','83.5','2003')
INSERT INTO temp([Name],[Class],[Mark],[Term])VALUES('李四','语文','90','2005')
DECLARE @sql varchar(2000)
set @sql=''
select @sql=@sql + ',class',count(id),sum(Mark) from temp
group by Name,class
declare @sql varchar(8000)
set @sql = 'select name,count(name) as 总,sum(mark) as 总分'
select @sql = @sql + ',count(case class when '''+class+''' then name end)['+class+'总数] ,sum(case class when '''+class+''' then mark end) ['+class+']'
from (select distinct class from temp) as s
select @sql = @sql+' from temp group by name'
select @sql
exec(@sql)
--drop table temp
- SQL 二维交叉报表 分类统计(行列转换)
- sql行列转换 交叉表
- sql 行列转化/交叉报表的实现
- sql行列统计后,行列转换显示
- SQL行列转换汇总统计
- 应用SQL交叉表实现行列转换
- 交叉表查询(普通行列转换)
- 行列转换 交叉表
- 行列转换 交叉表
- 行列转换 交叉表
- 行列转换交叉表
- 交叉表行列转换
- [MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)
- [MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)
- MySQL] 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)
- 二维数组行列转换
- MS-SQLServer 2000 T-SQL 交叉报表(行列互换) 交叉查询 旋转查询
- MS-SQLServer 2000 T-SQL 交叉报表(行列互换) 交叉查询 旋转查询
- 读《Ajax基础教程》(2)
- Linux下安装JDK以及Tomcat
- Java: JNI完全手册
- windows xp 快速启动栏"显示桌面"图标恢复方法
- 如何配置XNA开发环境
- SQL 二维交叉报表 分类统计(行列转换)
- XNA初试——2D精灵
- E文积累_20080307_I wouldn't look at it like that
- qt/embedded 2.3.10 移植
- 数据库设计中的规范化
- SQL 转义字符
- 质量屋管理思想
- XNA之进阶--3D模型的加载和控制
- VS2008正式版下载-vs2008下载地址