`

Sql Server 生成数据透视表

 
阅读更多

数据透视表是分析数据的一种方法,在Excel中就包含了强大的数据透视功能。数据透视是什么样的呢?给个例子可能更容易理解。假设有一张数据表:

     销售人员 书籍 销量

----------------------------------------

小王 Excel教材   10

小李 Excel教材 15

 小王 Word教材 8

小李 Excel教材 7

小王 Excel教材   9

小李 Excel教材 2

 小王 Word教材 3

小李 Excel教材

一种数据透视的方法是统计每个销售人员对每种书籍的销量 ,结果如下

----------------------------------------------------------------

Excel教材 Word教材  总计

---------------------------------------------- -----------------

  小王 29 0 29

小李 19 11 30

各位看明白了吗?这是最简单的一种数据透视了,如果有必要也可以有多级分组。

好了,那在Sql Server中如何视现数据透视的功能呢?我是Sql Server的初学者,看了网上的一些例子,结合自己的理解写了下面这些Sql语句.

生成基础数据的代码

Create   table  s(

复制代码
    [ name ]   nvarchar ( 50 ),
    book 
nvarchar ( 50 ),
    saledNumber 
int
)

insert   into  s ( [ name ] ,book,saledNumber)  values ( ' 小王 ' , ' Excel教材 ' , 10 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小李 ' , ' Excel教材 ' , 15 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小王 ' , ' Word教材 ' , 8 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小李 ' , ' Excel教材 ' , 7 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小王 ' , ' Excel教材 ' , 9 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小李 ' , ' Excel教材 ' , 2 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小王 ' , ' Word教材 ' , 3 );
insert   into  s ( [ name ] ,book,saledNumber) values ( ' 小李 ' , ' Excel教材 ' , 5 );
复制代码

 

 

生成数据透视表

set   @sql   =   ' SELECT [name],  '
select   @sql   =   @sql   +   ' sum(case  book when  ' + quotename (book, '''' ) + '  then saledNumber else 0 end) as  '   +   quotename (book) + ' , '    from  s  group   by  book
select   @sql   =   left ( @sql , len ( @sql ) - 1 )
select   @sql   =   @sql   +   ' , sum(saledNumber) as [sum] from s group by [name] '
select   @sql
exec ( @sql )

 

 

上面的查询语句首先是拼接了一条"Sql语句",它的最终结果为:

SELECT   [ name ] sum ( case   book  when   ' Excel教材 '   then  saledNumber  else   0   end as   [ Excel教材 ] , sum ( case   book  when   ' Word教材 '   then  saledNumber  else   0   end as   [ Word教材 ] sum (saledNumber)  as   [ sum ]   from  s  group   by   [ name ]

 

当然,如果表中的数据不同,那么这生成的Sql语句也是不同的。最后它调用了Sql Server的系统存储过程Exec来执行这条语句。截个图吧。

 

这就是在Sql Server中生成数据透视表的实现,其实它的核心也就是上面拼接成的那条Sql语句。更复杂的透视方式,比如多级透视,也是在这个基础上的实现的。

分享到:
评论

相关推荐

    Excel 2007数据透视表完全剖析 1/7

    7.4.2 使用SQL Server数据构建数据透视表 170 7.5 下一步 174 第8章 与其他人共享数据透视表 175 8.1 与其他版本的Office共享数据透视表 175 8.1.1 Excel 2003数据透视表中不可用的功能 176 8.1.2 Excel...

    Excel 2007数据透视表完全剖析 3/7

    7.4.2 使用SQL Server数据构建数据透视表 170 7.5 下一步 174 第8章 与其他人共享数据透视表 175 8.1 与其他版本的Office共享数据透视表 175 8.1.1 Excel 2003数据透视表中不可用的功能 176 8.1.2 Excel...

    Excel 2007数据透视表完全剖析 5/7

    7.4.2 使用SQL Server数据构建数据透视表 170 7.5 下一步 174 第8章 与其他人共享数据透视表 175 8.1 与其他版本的Office共享数据透视表 175 8.1.1 Excel 2003数据透视表中不可用的功能 176 8.1.2 Excel...

    Excel透视表报表生成组件源码(cs 2005,2008)

    为了实现将应用系统中的数据以Excel的数据透视表来显示的目的,我们应采用从外部数据源获取数据来生成Excel数据透视表的方式。而构成一个Excel的数据透视表报表的基本要素是数据源连接信息、所获取的查询结果、报表...

    Excel 2007数据透视表完全剖析 4/7

    7.4.2 使用SQL Server数据构建数据透视表 170 7.5 下一步 174 第8章 与其他人共享数据透视表 175 8.1 与其他版本的Office共享数据透视表 175 8.1.1 Excel 2003数据透视表中不可用的功能 176 8.1.2 Excel...

    SQL Server 2008 商业智能完美解决方案(3)

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server2005基础教程

    本书重点阐述了SQL Server 2005的基础知识,前半部分以建立一个金融数据库系统为主线,从最基础的收集信息入手,一步步地引导读者学会如何保证数据库的安全,创建表、主键、索引等项目,在表之间建立恰当的关系,并...

    SQL Server 2008商业智能完美解决方案 1/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server 2008商业智能完美解决方案 3/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server 2008商业智能完美解决方案 2/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server行转列的方法解析

    话不多说,请看代码: /* SELECT <非透视的列>, [第一个透视的列] AS <列名称>, [第二个透视的列] AS <...透视表的别名> <可选的 ORDER BY 子句>; */ declare @tb table ( cid int ,cname

    Access 2000数据库系统设计(PDF)---001

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式 生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试 有效性规则 1205.8 疑难...

    Access 2000数据库系统设计(PDF)---002

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式 生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试 有效性规则 1205.8 疑难...

    Access 2000数据库系统设计(PDF)---018

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试有效性规则 1205.8 疑难解答 ...

    Access 2000数据库系统设计(PDF)---003

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式 生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试 有效性规则 1205.8 疑难...

    Access 2000数据库系统设计(PDF)---011

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试有效性规则 1205.8 疑难解答 ...

    Access 2000数据库系统设计(PDF)---020

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试有效性规则 1205.8 疑难解答 ...

    Access 2000数据库系统设计(PDF)---009

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式 生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试 有效性规则 1205.8 疑难...

    Access 2000数据库系统设计(PDF)---012

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试有效性规则 1205.8 疑难解答 ...

    Access 2000数据库系统设计(PDF)---015

    1155.5 验证数据输入 1165.5.1 添加字段级有效性规则 1165.5.2 添加表级有效性规则和使用表达式生成器 1185.6 向Personnel Actions表添加记录 1195.7 输入Personnel Actions表数据和测试有效性规则 1205.8 疑难解答 ...

Global site tag (gtag.js) - Google Analytics