【问题标题】:SQL Server 2008 R2 - converting columns to rows and have all values in one columnSQL Server 2008 R2 - 将列转换为行并将所有值放在一列中
【发布时间】: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?

提前感谢您的帮助。

【问题讨论】:

    标签: sql-server-2008-r2 pivot dynamic-sql transpose unpivot


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      相关资源
      最近更新 更多