假设有一个表如下:

日期 时间 售货金额
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 2005中的处理方式:

  测试环境

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

  删除测试环境

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 ')

SQL Server 2005 处理交叉表的更多相关文章

  1. 在Sql Server 2005中将主子表关系的XML文档转换成主子表“Join”形式的表

    本文转载:http://www.cnblogs.com/Ricky81317/archive/2010/01/06/1640434.html 最近这段时间在Sql Server 2005下做了很多根据 ...

  2. SQL Server 2005导入Excel表问题

    EXCEL导入到SQL Server经常出现“文本被截断,或者一个或多个字符在目标代码页中没有匹配项” 原因: SQL Server的导入导出为了确定数据表的字段类型,取excel文件的前8行来判别. ...

  3. (转)SQL server 2005查询数据库表的数量和表的数据量

    本文转载自:http://hi.baidu.com/ajyajyajy/item/4e2a7f4dc83393d2c1a592c1 use DBNAMEgoselect * from sysobjec ...

  4. 删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,

    原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100 ...

  5. SQL Server 2005 中的分区表和索引

    SQL Server 2005 中的分区表和索引 SQL Server 2005          69(共 83)对本文的评价是有帮助 - 评价此主题   发布日期 : 3/24/2005 | 更新 ...

  6. SQL Server 2005中的分区表(六):将已分区表转换成普通表(转)

    我的俄罗斯名叫作“不折腾不舒服斯基”,所以,不将分区表好好折腾一下,我就是不舒服. 在前面,我们介绍过怎么样直接创建一个分区表,也介绍过怎么将一个普通表转换成一个分区表.那么,这两种方式创建的表有什么 ...

  7. SQL Server 2005入门到精通(案例详解)

    SQL Server 2005基础应用   一.数据库的基本操作 --创建数据库 create database new_db2 on primary ( name='new.mdf', filena ...

  8. 回首经典的SQL Server 2005

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com SQL Server是我使用时间最长的数据库,算起来已经有10年了.上世纪90年代,微软在软件开发的所有领域高歌猛 ...

  9. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

随机推荐

  1. OpenBSD内核之引导MBR

    MBR的介绍网上很多,没错,就那个最后以0x55AA结尾的512字节的引导块,OpenBSD提供了引导MBR实现:OpenBSD在x86上的引导过程为MBR --> PBR --> boo ...

  2. C指针的大小

    应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!但是对不对呢?为什么是这样? 搜了一下相关资料...居然发现回答不统一,很多人也同样是糊里糊涂. 下面对这个 ...

  3. zend create project prepare

    1.php ini 安装pear 设置include_path 2.apache AllowOverride LoadModule rerwite去掉注释 <VirtualHost *:> ...

  4. js里实现队列与堆栈

    在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍. 一 看一下它们的性质,这种 ...

  5. H:Highways

    总时间限制: 1000ms 内存限制: 65536kB描述The island nation of Flatopia is perfectly flat. Unfortunately, Flatopi ...

  6. HTML 列表 <ol><ul><li><dl><dt><dd>

    <ol>标签-有序列表 定义和用法: <ol>标签定义有序列表. HTML 与 XHTML 之间的差异 在 HTML 4.01 中,ol 元素的 "compact&q ...

  7. 学习ios【2】Objective-C 数字和字符串

    一 数字 1.使用Foundation.h可以直接导入所有的头文件. 在XCode中,想查看某个方法帮助,可以将光标放在方法上,按住option键同时单击即可. 官方文档:https://develo ...

  8. rtc关机闹钟2 Alarm manager

    public void set(int type, long triggerAtMillis, long windowMillis, long intervalMillis, PendingInten ...

  9. sql sever跨数据库复制数据的方法【转】

    1,用Opendatasource系统函数 详细的用法已经注释在sql代码中了.这个是在sqlserver到sqlserver之间的倒数据.2005,2008,2012应该都是适用的. --从远程服务 ...

  10. 删除 https://tfs.visualstudio.com上的项目

    比如注册的tfs地址为https://zhaobl.visualstudio.com,要删除的项目是 bushub 那么需要使用VS2013以上的 C:\Program Files (x86)\Mic ...