请教SQL server 中pivot的详细用法及语法规则

如题所述

SQL server 中使用 PIVOT关系运算符将表值表达式更改为另一个表。PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。

PIVOT 语法为SELECT <非透视的列>, [第一个透视的列],...[最后一个透视的列] FROM (<生成数据的 SELECT 查询>)  PIVOT (<聚合函数>(<要聚合的列>) FOR [<包含要成为列标题的值的列>] IN ( [第一个透视的列],... [最后一个透视的列]) ) AS <透视表的别名> <可选的 ORDER BY 子句>。

扩展资料:

由于SQL Server 2005有了新的PIVOT运算符,就不再需要CASE语句和GROUP BY语句了。(每个PIVOT查询都涉及某种类型的聚合,因此可以忽略GROUP BY语句。)PIVOT运算符能够利用CASE语句查询实现相同的功能,但是可以用更少的代码就实现,而且看起来更漂亮。

PIVOT运算符前面接的一定是一条查询语句。 有与PIVOT 执行相反的运算符UNPIVOT,将表值表达式的列转换为列值。相比于直接通过union来实现列转行,使用UNPIVOT可以让sql语句变得更加简洁。相对而言,理解难度会上升,可读性下降。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-21
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)

UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
完整语法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)

注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别
在数据库属性->选项->兼容级别改为 90

具体实例地址我私信发给你本回答被提问者和网友采纳
相似回答