PIVOT和UNPIVOT是SQL中用于数据透视的常用操作。PIVOT可以将行数据转换为列数据,UNPIVOT则相反,将列数据转换为行数据。
在PIVOT操作中,需要指定一个聚合函数(如SUM、AVG等)和一个PIVOT列,这个列将会成为新数据透视表中的列,其他非PIVOT列转换为新表中的行,并且需要在PIVOT列后面跟随一个FOR子句,用于指定PIVOT列需要转换的值,即新表中的列。
UNPIVOT操作则需要指定需要转换为行的列,转换结果将会包含三列:UNPIVOT列、所在的列名和该列对应的值。
具体语法如下:
PIVOT:
SELECT <非PIVOT列>, [<PIVOT值1>, <PIVOT值2>, …] FROM <表名> PIVOT (<聚合函数> (<列名>) FOR <PIVOT列> IN ([<PIVOT值1>, [<PIVOT值2>, …]])) AS <新表名>
UNPIVOT:
SELECT <非UNPIVOT列>, <列名>, <值> FROM <表名> UNPIVOT (<值> FOR <列名> IN ([<列1>, [<列2>, …]])) AS <新表名>
需要注意的是,PIVOT和UNPIVOT操作需要在特定版本的SQL Server中支持。