T-SQL PIVOT 行列转换

前面几个例子:

http://www.cnblogs.com/insus/articles/1969896.html

http://www.cnblogs.com/insus/articles/1970577.html

http://www.cnblogs.com/insus/articles/1970707.html

全是SQL Server行列转换或是列行转换的相关例子。不过在SQL Server2005版本开始,有一个新的函数PIVOT()可以很轻易实现这些功能。参考下面代码:

SELECT [RId],[2011-01-23],[2011-01-24],[2011-01-25],[2011-01-26]
FROM
(
    SELECT [Rid],[DT],[Hits] FROM [dbo].[RecordHits]
) AS p
PIVOT
(
    SUM([Hits]) FOR [DT] IN ([2011-01-23],[2011-01-24],[2011-01-25],[2011-01-26])
) AS Q;

执行结果:

另一种是想把上面的结果进行列行转换:

SELECT [DT],[R1],[R2],[R3],[R4]
FROM
(
    SELECT [Rid],[DT],[Hits] FROM [dbo].[RecordHits]
) AS p
PIVOT
(
    SUM([Hits]) FOR [RId] IN ([R1],[R2],[R3],[R4])
) AS Q;

执行结果:

T-SQL PIVOT 行列转换

时间: 2024-11-09 08:30:44

T-SQL PIVOT 行列转换的相关文章

SQL中PIVOT 行列转换

SQL中PIVOT 行列转换 本文导读:T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列. PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合.UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值. 通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 一.PIVOT实例 1

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句

先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全部)Key点对应的Value,横向显示(也即以行的方式显示) 这种查询方式很明显的一个却显示多次对字表查询(暂时抛开索引) 相比这种查询方式很多人都遇到过,如果子表是配置信息之类的小表的话,问题不大,如果字表数据量较大,可能就会有影响了. 这个查询目的是将”纵表”存储的结果“横向”显示,相当于横列转换的感觉了.可以将子表的结果一次性将纵表的结果转换成横标,再跟主表连接,然后得到一个最终一样的查询

sql server 行列转换

SQL 列转行 2011-04-22 16:13:41 好东西,转一下,嘿嘿. * 普通行列转换 (爱新觉罗.毓华 2007-11-18于海南三亚) 假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 */ ------------------------------------------------------------------------- /* 想变成

简单的叙述下SQL中行列转换的小知识!

行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧.这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理, 但是不要太执着于这些细节,能说明问题就好,傻笑ing..... 1 列转行:按照某一列分组,将另一列作为行时列名可数,不变. 什么意思呢?话说多了反而不懂,放两张图

sql 时间行列转换求总和

先看表结构 USE [TestMyDB] GO /****** Object: Table [dbo].[Product] Script Date: 2015/9/25 16:09:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING OFF GO CREATE TABLE [dbo].[Product]( [ProductId] [VARCHAR](36) NOT NULL, [ProductN

12、SQL Server 行列转换

SQL Server 行转列 在SQL Server 2005中PIVOT 用于将列值转换为列名(行转列),在SQL Server 2000中是没有这个关键字的 只能用case语句实现. --创建测试数据库 use master go if ( exists (select * from sys.databases where name = 'webDB') ) drop database webDB go create database webDB on primary ( name = 'w

SQL的行列转换

[一]行转列 1,查询原始的数据 /***这次练习的主题,行转列,列转行***/select * from Scores 2,得到姓名,通过group by select Student as '姓名'from Scoresgroup by Studentorder by Student 3,再加上max, case……when select Student as '姓名',max(case Subject when '语文' then Score else 0 end) as '语文' ,--

SQL语句行列转换

创建表格 CREATE TABLE T2 (STU_NAME CHAR(5),COURSE CHAR(5),MARK INT NOT NULL) INSERT INTO T2 VALUES ('城南','马哲',70) INSERT INTO T2 VALUES ('城南','数学',65) INSERT INTO T2 VALUES ('城南','英语',58) INSERT INTO T2 VALUES ('城南','语文',79) INSERT INTO T2 VALUES ('李四','

sql实现行列转换

姓名 科目 成绩 牛芬 语文 81 牛芬 数学 88 牛芬 英语 84 张三 语文 90 张三 数学 98 张三 英语 90 (表一) 现有一个表如(表一) 姓名 语文 数学 英语 牛芬 81 88 84 张三 90 98 90 (表二) 想要转换为(表二) sql:select  stuName as 姓名,chinese as 语文,math as 数学,english as 英文 from( select sutName, case subject when chinese then sc