请解释 PIVOT 的各个部分部分、PIVOT

由网友(我是你得不到的爹)分享简介:我已经阅读了很多博客文章.我已阅读文档.我通常很擅长学习新东西,但即使我一直在阅读,但我只是不了解 SQL Server (2008) 中 PIVOT 的部分内容.有人可以把它给我吗,又好又慢.(即 Pivot for Dummies)如果需要示例,我们可以使用 in this question.p>以下是我尝试转换该...

我已经阅读了很多博客文章.我已阅读文档.我通常很擅长学习新东西,但即使我一直在阅读,但我只是不了解 SQL Server (2008) 中 PIVOT 的部分内容.

有人可以把它给我吗,又好又慢.(即 Pivot for Dummies)

运放这十个 坑 ,看看你有没有遇到过

如果需要示例,我们可以使用 in this question.p>

以下是我尝试转换该示例的方式:

选择其他ID、Val1、Val2、Val3、Val4、Val5从(选择其他 ID,Val来自@randomTable) p枢(最大值(val)用于 Val IN(Val1、Val2、Val3、Val4、Val5)) 作为数据透视表;

上面的查询给了我空值,而不是 Val1、Val2... 列中的值.

但要明确一点,我不是在这里寻找固定查询.我需要理解 PIVOT,因为我正在寻找比这个示例更复杂的东西.

具体是什么处理聚合?我只想获取与给定 ID 匹配的所有字符串值并将它们放在同一行中.我不想汇总任何东西.(同样,请参阅 this question 作为我的示例.)

解决方案

透视查询说明

FROM(SELECT OtherID, Val, 金额来自@randomTable) p

这些是成为数据透视的基础数据"的列.不要包含不执行任何操作的列.正如您不会将非 GROUP BY 列放入 SELECT 子句一样,您也不会在 PIVOT 源中列出未使用的列.

PIVOT(最大(数量)用于 Val IN(Val1、Val2、Val3、Val4、Val5)) 作为数据透视表;

这部分说您正在创建 5 个名为Val1"到Val5"的新列.这些列名代表 Val 列中的值.所以预计您的表格将包含类似这样的内容

otherID Val 数量1 值 1 12 值 2 21 值 3 31 值 1 5(等)(此列包含 Val1 - Val5 之一,或 null)

因此,您现在有了 5 个以前不存在的新列.列中的内容是什么?

出现在 OUTPUT 中但不是 PIVOTed 列的任何列都是GROUP BY"列.聚合函数将所有数据收集到 GROUP BY 列和 PIVOTED 列之间的交叉单元格中.

因此,为了说明,使用上面的示例数据,我们有 otherID=1 和 val=Val1.在输出表中,对于每个 (otherID/val) 组合,只有一个单元格表示 Max(amount) 的这种组合

otherID Val1 Val2 Val3 Val4 Val51 <x>………………(等等)

对于标记为 <x> 的单元格,只允许一个值,因此 <x> 不能包含多个 amount 值.这就是我们需要聚合它的原因,在本例中使用 MAX(amount).所以其实输出是这样的

(unpivoted columns) (pivoted, 创建新"列)其他ID |值 1 值 2 值 3 值 4 值 51 |MAX(数量) Max(数量)