SQL PIVOT函数简述

SQL PIVOT函数简述

小声嘀咕

很多人说PIVOT用来实现行转列功能,但是我觉得PIVOT也不是完完全全的行转列,用用体会体会就知道。有时候在复杂的需求中有所应用,但是一般来说可以通过拼凑字符串执行动态SQL解决问题,这也是最常用到的方法。PIVOT函数或许可以提供另一种简便的方式。

说说PIVOT

先在数据库创建一个全局临时表(我喜欢),并且插入测试数据。

CREATE TABLE ##TEST(
project NVARCHAR(10),
student NVARCHAR(20),
score DECIMAL
)
INSERT INTO ##TEST VALUES('语文','小林',85)
INSERT INTO ##TEST VALUES('语文','小龙',89)
INSERT INTO ##TEST VALUES('语文','小龙',98)
INSERT INTO ##TEST VALUES('数学','小林',95)
INSERT INTO ##TEST VALUES('数学','小龙',90)
INSERT INTO ##TEST VALUES('英语','小明',99)
INSERT INTO ##TEST VALUES('英语','小林',97)
INSERT INTO ##TEST VALUES('英语','小龙',98)

执行 SELECT * FROM ##TEST 可以看到这个表目前长这个样子
在这里插入图片描述
然后写一个简单的PIVOT用法,看看它到底会出现怎样的结果,SQL语句如下

SELECT * FROM ##TEST
AS P
PIVOT(SUM(score) FOR project IN([语文],[数学],[英语])) AS T

执行结果长这个样子
在这里插入图片描述
可以看到:
1.PIVOT的格式:
SELECT [原表字段1,2,3…] FROM [表名]
AS [原表别名]
PIVOT( [聚合函数] ( [原表字段1] ) FOR [原表字段2] IN ( [原表2值1],[原表字段2值2]… ) ) AS [新表别名]
2.注意点:
(1)PIVOT必须列举[原表字段2的值],列举的值必须用中括号 [ ] 包含起来,就算是字符串类型也不需要单引号 ’ ’
(2)PIVOT中列举的值将作为新表的字段名称
(3)为什么会有聚合函数?此处并没有GROUP BY 呀!偷偷告诉你,GROUP BY 是隐藏的,除了语句中出现的两个 [原表字段],其他[原表字段]将被GROUP BY,这样才使得上面的PIVOT结果出现多行
(4)列举字段的这个组在原表中没有数据将以NULL值存在于PIVOT后的新表
(5)暂时想不到了

猜你喜欢

转载自blog.csdn.net/qq_31729917/article/details/83796396