由网友(我是你得不到的爹)分享简介:我已经阅读了很多博客文章.我已阅读文档.我通常很擅长学习新东西,但即使我一直在阅读,但我只是不了解 SQL Server (2008) 中 PIVOT 的部分内容.有人可以把它给我吗,又好又慢.(即 Pivot for Dummies)如果需要示例,我们可以使用 in this question.p>以下是我尝试转换该...![运放这十个 坑 ,看看你有没有遇到过](https://p.xsw88.cn/allimgs/daicuo/20230907/6459.png)
我已经阅读了很多博客文章.我已阅读文档.我通常很擅长学习新东西,但即使我一直在阅读,但我只是不了解 SQL Server (2008) 中 PIVOT 的部分内容.
有人可以把它给我吗,又好又慢.(即 Pivot for Dummies)
![运放这十个 坑 ,看看你有没有遇到过](https://p.xsw88.cn/allimgs/daicuo/20230907/6459.png)
如果需要示例,我们可以使用 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(数量)
相关推荐
最新文章