`
wuhen86
  • 浏览: 13340 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

SQL Server Select的递归查询-交叉表

阅读更多

比如查询一个Post的所有上级Post

Select的递归查询虽不常见,却令人着迷,它能够把垂直数据串联成水平数据,其语法如下:

SELECT @variable = @variable + d.column
FROM (Derived Table) as d

其中Derived Table常用Select子查询,所以给我的感觉更像一个循环,而不是递归(当然递归也是一种特殊的循环),Derived Table中的记录是自上而下逐行读取的,比如:

在[order]表shippingAddress列垂直方向上有记录:

shippingAddress

杭州

上海

南京

宁波

Select递归语句:

declare @shipping nvarchar(1024)
set @shipping = ''
SELECT @shipping = @shipping + d .ShippingAddress + ','
FROM (select distinct shippingAddress from [order]) as d          
select @shipping

结果:

上海,南京,宁波,

提升:利用select递归生成的数据串结合动态SQL可以生成复杂的交叉表。

1.列出想要生成的数据列

declare @shipping nvarchar(1024)
set @shipping = ''
SELECT @shipping = @shipping + 'sum(Quantity) as ' + d .ShippingAddress + ','
FROM (select distinct shippingAddress from [order]) as d          
set @shipping = 'select CargoID,' + @shipping + 'Sum(Quantity) as Total from [order] group by CargoID'
select @shipping
exec sp_executesql @shipping

结果:

CargoID 杭州 南京 宁波 上海

Tatol 1 9 9 9 9 9

2  2 2 2 2 2 3

11 11 11 11 11

 

2.我们的目标是统计不同的货物在不同地方发货的数量,所以做如下修改:

declare @shipping nvarchar(1024)
set @shipping = ''
SELECT @shipping = @shipping +
'sum(case ShippingAddress 
          when ''' + d.[Column] + ''' then Quantity
          else 0
     end) as ' + d.[Column] + ','
FROM (select distinct shippingAddress as [Column] from [order]) as d          
set @shipping = 'select CargoID,' + @shipping + 'Sum(Quantity) as Total from [order] group by CargoID'
select @shipping
exec sp_executesql @shipping

结果:

CargoID 杭州 南京 宁波 上海

Tatol 1 9 9 9 9 9

2  2 2 2 2 2 3

11 11 11 11 11

如果动态交叉表对于项目很重要,可以考虑使用Relational Application Companion(RAC),它为SQL Server编写生成交叉表存储过程,尽管如此,个人更推荐使用report service,更加清晰简单,可以回避复杂的Select语句

分享到:
评论

相关推荐

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

    本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...

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

    10.1.1 在多表查询中使用子查询 187 10.1.2 在子查询中使用聚合函数 188 10.2 创建和使用返回多行的子查询 190 10.2.1 in子查询 190 10.2.2 in子查询实现集合交和集合差运算 191 10.2.3 exists子查询 192 ...

    SQL Server 2008编程入门经典(第3版)

    第1章 RDBMS基础:SQLServer数据库的构成 1.1 数据库对象概述 1.1.1 数据库对象 1.1.2 事务日志 1.1.3 最基本的数据库对象:表 1.1.4 文件组 1.1.5 数据库关系图 1.1.6 视图 1.1.7 存储过程 1.1.8 用户自定义函数 ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    第1章 RDBMS基础:SQLServer数据库的构成 1.1 数据库对象概述 1.1.1 数据库对象 1.1.2 事务日志 1.1.3 最基本的数据库对象:表 1.1.4 文件组 1.1.5 数据库关系图 1.1.6 视图 1.1.7 存储过程 1.1.8 用户自定义函数 ...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    第1章 RDBMS基础:SQLServer数据库的构成 1.1 数据库对象概述 1.1.1 数据库对象 1.1.2 事务日志 1.1.3 最基本的数据库对象:表 1.1.4 文件组 1.1.5 数据库关系图 1.1.6 视图 1.1.7 存储过程 1.1.8 用户自定义函数 ...

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

    《精通SQ:结构化查询语言详解》全面讲解SQL语言,提供317个典型应用,读者可以随查随用,针对SQL Server和Oracle进行讲解,很有代表性。 全书共包括大小实例317个,突出了速学速查的特色。《精通SQ:结构化查询语言...

    精通sql结构化查询语句

    SQL查询篇第6章 简单的SELECT语句查询 6.1 查询的基本结构 6.1.1 了解SELECT语句 6.1.2 SELECT语句的语法格式 6.1.3 SELECT语句的执行步骤 6.2 简单的查询语句 6.2.1 查询表中指定的字段 6.2.2 查询所有的字段 6.2.3...

    程序员的SQL金典4-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典6-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典7-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典3-8

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用 显示部分信息

    程序员的SQL金典.rar

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用

    mysql数据库的基本操作语法

    自引用、自关联(递归表、树状表) create table tree( id int auto_increment primary key, name varchar(50), parent_id int, foreign key(parent_id) references tree(id) ); 级联删除:删除主表的数据时,关联...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 <br>1.1 Visual Studio开发环境安装与配置 2 <br>0001 安装Visual Studio 2005开发环境须知 2 <br>0002 配置合适的Visual Studio 2005...

Global site tag (gtag.js) - Google Analytics