`
huozheleisi
  • 浏览: 1234823 次
文章分类
社区版块
存档分类
最新评论

SQL交叉表的实例(横表转纵表)

 
阅读更多

很简单的一个东西,见网上好多朋友问“怎么实现交叉表?”,以下是我写的一个例子,数据库基于SQL SERVER 2000。
  
  交叉表实例
  
  建表:
  
  在查询分析器里运行:
  
  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],[subject],[Source]) values (N'李四',N'数学',70)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'英语',80)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'数学',75)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'王五',N'语文',57)
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'李四',N'语文',80) [bitsCN.Com]
  
  INSERT INTO [test] ([name],[subject],[Source]) values (N'张三',N'英语',100)
  
  Go
  
 

  交叉表语句的实现:
  
  用于:交叉表的列数是确定的
  
  select 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
  
  group by name
  
  --用于:交叉表的列数是不确定的
  
  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


  

MS Server的Analysis Services組件是專門用來做交叉表的處理

Microsoft SQL Server 2000 Analysis Services

自己制作的过程:

CREATE Table allen_test(
  id NUMBER(8,0) NOT NULL ,  
  name VARCHAR2(30) NOT NULL ,  
  subject VARCHAR2(30) NOT NULL ,  
  Source NUMBER(8,2) ,
PRIMARY Key (Id)  
  );
COMMENT ON Column allen_test.Id IS '序号';
COMMENT ON Column allen_test.Name IS '姓名';
COMMENT ON Column allen_test.subject IS '学科';
COMMENT ON Column allen_test.Source IS '分数';
  
  INSERT Into allen_test values (1, '张三','语文',60);  
  INSERT INTO allen_test values (2, '李四','数学',70);  
  INSERT Into allen_test values (3, '王五','英语',80);   
  INSERT INTO allen_test values (4, '王五','数学',75);  
  INSERT INTO allen_test values (5, '王五','语文',57);  
  INSERT INTO allen_test values (6, '李四','语文',80) ;  
  INSERT INTO allen_test values (7, '张三','英语',100);
  

select 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 allen_test  
group by Name;

分享到:
评论

相关推荐

    sql2000交叉表实例

    sql2000交叉表实例,如统计各个销售员全国各省的客户数,每行显示一个销售员,省名做为列标题(但省的数目姓名不定),SQL帮助里用CASE写的交叉表不实用,就是因为省的数目姓名不定。

    SQL SERVER 2000开发与管理应用实例

    涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据库安全、系统表应用实例、SQL Server...

    数据分层汇总交叉报表SQL语句实现方法

    在管理系统中,管理人员往往需要对业务数据进行不同需求的分层汇总,并产生各种形式交叉报表。为了实现此类报表,程序员需要构造层次结构非常复杂的SQL语句,甚至使用前台编程工具或其它报表工具来完成。 以下通过二...

    SQL查询技巧(范例宝典)

     实例362 静态交叉表(SQLServer 2000) 531  实例363 动态交叉表(SQLServer 2000) 533  10.19 函数查询 535  实例364 在查询语句中使用格式化函数 536  实例365 在查询语句中使用字符串函数 ...

    VB动态交叉表查询实例

    摘要:VB源码,数据库应用,交叉表查询 VB6.0与SQL2000结合演示的动态交叉表查询方法,测试前请首先附加Database文件中的数据库,然后再运行可执行文件。  数据库的附加方法如下:  1.将目录database下的xs_Data.MDF...

    SQL语句集锦.rar

    工作中常用的SQL + 超复杂SQL 交叉连接查询corss.txt 公交线路问题.txt 。。。。 充储过程--sql0.sql 分割字符串.txt 分布式查询.txt 分组排列进行更新.txt 别名.txt 动态SQL语句.txt 动态语句.txt 区分大小写.txt ...

    C# 静态交叉表(SQLServer2000)源码实例,销售业绩分析

    摘要:C#源码,数据库应用,dataGridView,静态交叉表 C# 静态交叉表(SQLServer2000)源码实例,进行销售业绩的分析查询,可按员工姓名分析,或按部门分析,分析前请附加Database文件夹中的数据库文件。

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例282 动态交叉表(SQL Server 2000) 9.17 函数查询 实例283 在查询语句中使用字符串函数 实例284 在查询中使用日期函数 实例285 在查询时为表中的空字段添加默认信息 第10章 打印与报表技术 10.1 基础报表...

    精通SQL--结构化查询语言详解

    4.2.2 本章实例用到的实例表 64 4.2.3 创建简单的非簇索引 66 4.2.4 多字段非簇索引的创建 69 4.2.5 使用unique关键字创建惟一索引 70 4.2.6 使用clusterde关键字创建簇索引 71 4.2.7 索引的销毁 73 4.2.8 ...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。  书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...

    (第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础

    主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。  书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...

    Delphi开发范例宝典目录

    实例294 创建表和删除表 388 实例295 对ADO控件的无数据库操作 389 第9章 SQL技术 391 9.1 通用查询 392 实例296 SQL语句的应用方法 392 实例297 SQL语句的模糊查询 393 实例298 高级Like语句 394 ...

    C#动态交叉表查询

    摘要:C#源码,数据库应用,交叉表查询 C#动态交叉表查询,附有数据库文件,动态交叉表查询的SQL实例,源代码完整。

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...

    明日科技《C#示例源代码》(13-16)

    实例096 使用交叉表实现商品销售统计 345 实例097 通过视图修改职工信息 347 实例098 通过存储过程对职工信息进行管理 350 实例099 使用触发器添加、修改及删除职工信息 356 实例100 使用LinqToSql操作...

Global site tag (gtag.js) - Google Analytics