SQL Server 2005 处理交叉表
--原贴:http://community.csdn.net/Expert/topic/4617/4617995.xml?temp=4.882449E-02
日期 时间 售货金额
2006-01-02 早上 50
2006-01-02 中午 20
2006-01-02 晚上 30
2006-01-02 零晨 40
2006-01-03 早上 40
2006-01-03 中午 60
2006-01-03 晚上 50
2006-01-03 零晨 50
2006-01-04 早上 80
2006-01-04 中午 60
2006-01-04 晚上 20
2006-01-04 零晨 40
...........................
............................
...........................
.........
能否用行转列的方式在进行数据查询中将上面数据的查询结果显示为:
日期 早上 中午 晚上 零晨 金额小计
2006-01-02 50 20 30 40 140
2006-01-03 40 60 50 50 200
2006-01-04 80 60 30 20 190
..........
..........
--SQL 20005中的处理方式:
--测试环境
Create table T(日期 datetime,时间 varchar(20),售货金额 int)
insert into T select '2006-01-02','早上',50
union all select '2006-01-02','中午',20
union all select '2006-01-02','晚上',30
union all select '2006-01-02','零晨',40
union all select '2006-01-03','早上',40
union all select '2006-01-03','中午',60
union all select '2006-01-03','晚上',50
union all select '2006-01-03','零晨',50
union all select '2006-01-04','早上',80
union all select '2006-01-04','中午',60
union all select '2006-01-04','晚上',20
union all select '2006-01-04','零晨',40
--查询
select * ,金额小计=(select sum(售货金额) from T where 日期=PT.日期 ) from T as TAB
PIVOT
( max(售货金额)
for 时间 in ([早上],[中午],[晚上],[零晨])
) as PT
--结果
/*
日期 早上 中午 晚上 零晨 金额小计
----------------------- ----------- ----------- ----------- ----------- -----------
2006-01-02 00:00:00.000 50 20 30 40 140
2006-01-03 00:00:00.000 40 60 50 50 200
2006-01-04 00:00:00.000 80 60 20 40 200
(3 行受影响)
*/
--删除测试环境
Drop Table T
---动态SQL
DECLARE @S VARCHAR(MAX)
SET @S=''
SELECT @S=@S+',['+时间+']' FROM T
GROUP BY 时间
SET @S=STUFF(@S,1,1,'')
EXEC('
select 日期,'+@S+',金额小计=(select sum(售货金额) from T where 日期=PT.日期 ) from T as TAB
PIVOT
( max(售货金额)
for 时间 in ('+@S+')
) as PT
')
转载于:https://www.cnblogs.com/Nina-piaoye/archive/2006/06/15/426240.html
SQL Server 2005 处理交叉表相关推荐
- 在SQL Server 2005中实现表的行列转换()
PIVOT和UNPIVOT关系运算符是SQL Server 2005提供的新增功能,因此,对升级到SQL Server 2005的数据库使用PIVOT和UNPIVOT时,数据库的兼容级别必须设置为90 ...
- SQL Server 2005 术语词汇表
术语 定义 ActiveX 数据对象 (ActiveX Data Objects) 一种易于使用的应用程序编程接口 (API),用于封装 OLE DB 以在诸如 Visual Basic.Visual ...
- 在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句
公用表表达式CTE是Sql Server 2005引入的一种新的表表达式.CTE在许多方面都类似于派生表.逻辑上CTE是一个临时结果集,它仅仅存在于它发生的语句中.您可以在SELECT.INSERT. ...
- sql server 创建动态交叉表
我所了解的创建动态交叉表有两种方法,如下图,有这样一张销售表 ,我想统计个人的销售业绩,如图二表示出来, 创建销售表 CREATE TABLE [dbo].[销售]([ID] [int] NOT NU ...
- 利用SQL Server 2005特性删除表中重复数据
http://www.cnblogs.com/haosola/archive/2010/02/04/1663150.html 转载于:https://www.cnblogs.com/modernsky ...
- SQL Server 2005实现负载均衡的详细介绍
SQL Server 2005实现负载均衡的详细介绍 SQL Server 2005仍然不直接地支持负载均衡--但是它为以前SQL Server版本中可用的所有负载均衡方法提供了令人激动的改善和支持. ...
- SQL Server 2005利用分区对海量数据的处理 [转自13590--北极燕鸥]
超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算.而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长.这不但影响着数据库的运行效率,也增大数据库的维护难度.除了表的数据量外,对表 ...
- 用SQL Server 2005构建高性能数据仓库
用SQL Server 2005构建高性能数据仓库 摘要:本文主要讨论当架构一个很大的.高性能的数据仓库,特别是对那种无法预知有多少查询量的系统时要考虑的一些东西.这个讨论包括SQL Server 2 ...
- SQL Server 2005中专用管理员连接 (DAC) 使用技巧修改系统表的方法
Server 2005 专用管理员连接 (DAC) 使用技巧 1 什么是专用管理员连接? SQL Server 2005 为管理员提供了一种特殊的诊断连接,以供在无法与服务器建立标准连接时使用. 2 ...
最新文章
- 寒冰linux视频教程笔记8 系统监控
- VS2008如何自动添加消息映射
- GUI_Download的Codepage参数
- python的userlist_Python中UserDict、UserString、UserList有用吗?
- Linux(CentOS6.4)下简单部署Solr4.8.1
- android 元素点击位置,appium自动化操作之元素定位点击事件全家桶(find_element_by、find_elements_by)...
- 从需求到交付——论敏捷过程中的需求管理
- The Nth Item
- 第27课 数组的本质分析
- 图像处理中滤波(filtering)与卷积(convolution)的区别
- MySQL命令行登录数据库
- c语言顺序比较法字符,常用C语言排序算法解析
- 开发必备的文本比较工具
- ACM基础题——小刘认亲
- oracle 取前行,【企业信息化研究所】TF-SWUFE Oracle Club抵着寒风前行—甲骨文俱乐部第九周分享会...
- 最新精仿小刀娱乐资源网模板源码,带前台会员投稿审核功能
- 《仿真使用ARENA软件》
- PLC模拟量采集算法数学基础(线性传感器)
- 没有使用IaC的DevOps系统都是耍流氓
- 正则表达式验证手机号,邮箱
热门文章
- 刚安装的python如何使用-python中RabbitMQ的使用(安装和简单教程)
- python打不开-安装的python为什么打不开
- python安装numpy模块-python的numpy模块安装不成功简单解决方法总结
- 学python要考什么证-学python需要考证吗?
- 21天精通python-21天学通Python 完整pdf扫描版[58MB]
- python详细安装教程视频-如何安装Python运行环境Anaconda?(视频教程)
- python英文单词-python常用150个英文单词
- opencv、matplotlib、pillow和pytorch读取数据的通道顺序
- 在linux环境下,使用find查找某个文件的指定路径
- Camelot:从pdf中提取表格数据