项目使用SqlServer2008,遇到了列转行的问题,发现微软提供了一个很好用的方法
pivot:用于列转行,unpivot:用于行转列;
由于查询的时候,会遇到如图所示问题
所以使用pivot进行列转行的操作,sql语句如下:
SELECT PSEQ,供稿單位,撰稿人,关键字词 FROM
(SELECT PSEQ,ITEMNAME,CONTENT from TEXTMSG_CHAR) X
pivot (max(CONTENT)
FOR ITEMNAME IN
(供稿單位,撰稿人,关键字词)) t
得到结果如下:
效果看到了,下面来介绍一下具体用法,在网上看了一些别人的例子,查了微软的官网:
http://technet.microsoft.com/zh-cn/library/ms177410.aspx
介绍如下:“可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。”
带批注的 PIVOT 语法。
SELECT <非透视的列>,
[第一个透视的列] AS <列名称>,
[第二个透视的列] AS <列名称>,
...
[最后一个透视的列] AS <列名称>,
FROM
(<生成数据的 SELECT 查询>)
AS <源查询的别名>
PIVOT
(
<聚合函数>(<要聚合的列>)
FOR
[<包含要成为列标题的值的列>]
IN ( [第一个透视的列], [第二个透视的列],
... [最后一个透视的列])
) AS <透视表的别名>
<可选的 ORDER BY 子句>;
我对此的理解为:FOR
[<包含要成为列标题的值的列>]
IN ( [第一个透视的列], [第二个透视的列],
... [最后一个透视的列])
)
用来将指定列的值生成为列的标题字段,而<聚合函数>(<要聚合的列>)用来作为填充这些新生成的列的内容。
其实理解PIVOT的用法,关键的一句还是在于“可以使用 PIVOT 和 UNPIVOT 关系运算符将表值表达式更改为另一个表”。
- 大小: 7.5 KB
- 大小: 3.7 KB
分享到:
相关推荐
在SQL Server中,行列互转是一种常见的数据处理需求,它能帮助我们以更直观的方式展示数据。本篇文章将深入探讨如何使用聚合函数Pivot和Unpivot来实现这一目标,特别是针对SQL Server数据库。 首先,让我们了解什么...
在SQL Server中,行列互转是数据处理中常见的需求,尤其在数据分析和报表展示时。这个过程通常称为“透视”或“转置”。这里主要介绍两种方法:静态方法和动态方法,以学生成绩为例进行说明。 1. **静态方法**: ...
### SQL Server中的行列互转 #### 一、背景介绍 在处理数据时,我们经常需要对表格中的数据进行各种各样的操作,其中之一就是行列互转。比如,原始数据可能是按学生姓名和科目存储成绩,但我们需要按科目汇总所有...
### SQL之行列互变问题详解 #### 一、引言 在处理数据库中的数据时,我们经常遇到需要将数据从一种格式转换为另一种格式的需求,其中最常见的一种就是行列互换的问题。例如,原始数据是按照列的形式存储的,而我们...
SqlSugar的新功能包括配置查询、多租户+仓储+自动分配、行列互转功能等。其中,配置查询解决了大量字典表和简单就为取一个name就要写联表的问题,让单表查询解决一切。多租户+仓储+自动分配功能可以实现多租户模式下...
通过ExcelHelper,开发者可以轻松地在Excel与数据库(如SQL Server或其他支持.NET的数据提供者)之间进行数据迁移。 7. **灵活性**:优秀的ExcelHelper实例源码应该提供足够的灵活性,允许用户自定义读写行为,比如...
全面操作SQL Server 2000.ec 公农历转换.ec 公农历转换1.2.ec 公农历转换 1.ec 公农历转换35.ec 公农历转换_2.ec 公历转农历模块 1.0.ec 公历转换为农历.ec 六六自用 模块.ec 六十四卦相.ec 关于窗口.ec 关于菜单的...
全面操作SQL Server 2000.ec 公农历转换.ec 公农历转换1.2.ec 公农历转换 1.ec 公农历转换35.ec 公农历转换_2.ec 公历转农历模块 1.0.ec 公历转换为农历.ec 六六自用 模块.ec 六十四卦相.ec 关于窗口.ec 关于菜单的...