SQL Server 2008 R2 - 将列转换为行并将所有值放在一列中
Posted
技术标签:
【中文标题】SQL Server 2008 R2 - 将列转换为行并将所有值放在一列中【英文标题】:SQL Server 2008 R2 - converting columns to rows and have all values in one column 【发布时间】:2018-03-14 06:40:17 【问题描述】:我很难理解枢轴/非枢轴概念,并希望有人可以帮助我或就如何解决我的问题给我一些指导。
这是我的简化示例表
+-------+------+------+------+------+------+
| SAUID | COM1 | COM2 | COM3 | COM4 | COM5 |
+-------+------+------+------+------+------+
| 1 | 24 | 22 | 100 | 0 | 45 |
| 2 | 34 | 55 | 789 | 23 | 0 |
| 3 | 33 | 99 | 5552 | 35 | 4675 |
+-------+------+------+------+------+------+
我正在寻找的最终结果类似于下面的表格结果
+-------+-----------+-------+
| SAUID | OCCUPANCY | VALUE |
+-------+-----------+-------+
| 1 | COM1 | 24 |
| 1 | COM2 | 22 |
| 1 | COM3 | 100 |
| 1 | COM4 | 0 |
| 1 | COM5 | 45 |
| 2 | COM1 | 34 |
| 2 | COM2 | 55 |
| 2 | COM3 | 789 |
| 2 | COM4 | 23 |
| 2 | COM5 | 0 |
| 3 | COM1 | 33 |
| 3 | COM2 | 99 |
| 3 | COM3 | 5552 |
| 3 | COM4 | 35 |
| 3 | COM5 | 4675 |
+-------+-----------+-------+
我正在环顾四周,但大多数示例似乎都使用了 pivot,但很难尝试将其包裹在我的案例中,因为我需要将值全部放在一列中。
我希望尝试一些硬编码来与我的示例相似,但我的实际表列约为 100,每个表的 SAUID #s 不同,并且看起来需要动态 sql?
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:使用UNPIVOT
:
SELECT u.SAUID, u.OCCUPANCY, u.VALUE
FROM yourTable t
UNPIVOT
(
VALUE for OCCUPANCY in (COM1, COM2, COM3, COM4, COM5)
) u;
ORDER BY
u.SAUID, u.OCCUPANCY;
Demo
【讨论】:
以上是关于SQL Server 2008 R2 - 将列转换为行并将所有值放在一列中的主要内容,如果未能解决你的问题,请参考以下文章
转换 SQL Server 2008 R2 和 2012 之间的差异
在 SQL Server 2008 R2 中将 varchar 转换为时间戳