【问题标题】:How to move columns to rows in a SQL Server select?如何将列移动到 SQL Server 选择中的行?
【发布时间】:2021-03-29 16:27:17
【问题描述】:

我有一个如下所示的 SQL Server 2016 临时表:

SECTION_NAME  SORT_ORDER  COL1  COL2  COL3  COL4  COL5  COL6  COL7  COL8  COL9  COL10
ONE           1           A     B     C     D     E     F     G     H     I     J
ONE           2           C     D     E     F     G     H     I     X     Y     Z

我只选择 COL 列,并希望每个记录的 COL 列位于单独的行上,如下所示:

SELECT * FROM #TEMPTABLE

A
B
C
D
E
etc

我该怎么做?我不太了解 PIVOT,所以不确定我是否可以使用它。谢谢!

【问题讨论】:

  • 您想取消旋转,而不是旋转。快速搜索“将列转换为行 SQL Server”将为您提供丰富的资源。
  • 您可以使用unpivot 语法或applyvalues 构造
  • 太棒了!!!我一直在想我需要对数据进行透视而不是对它进行透视。这完美!非常感谢!!!

标签: sql-server pivot


【解决方案1】:

您需要像这样使用交叉应用和值来“取消透视”,我更喜欢这样做

SELECT
    row_number() over (order by SECTION_NAME, SORT_ORDER, ca.value) as ID
  , section_name
  , sort_order
  , ca.value
FROM pivoted
CROSS APPLY (
    VALUES 
                (col1)
              , (col2)
              , (col3)
              , (col4)
              , (col5)
              , (col6)
              , (col7)
              , (col8)
              , (col9)
              , (col10)
            ) AS ca(value)

产生:

+----+--------------+------------+-------+
| ID | section_name | sort_order | value |
+----+--------------+------------+-------+
|  1 | ONE          |          1 | A     |
|  2 | ONE          |          1 | B     |
|  3 | ONE          |          1 | C     |
|  4 | ONE          |          1 | D     |
|  5 | ONE          |          1 | E     |
|  6 | ONE          |          1 | F     |
|  7 | ONE          |          1 | G     |
|  8 | ONE          |          1 | H     |
|  9 | ONE          |          1 | I     |
| 10 | ONE          |          1 | J     |
| 11 | ONE          |          2 | C     |
| 12 | ONE          |          2 | D     |
| 13 | ONE          |          2 | E     |
| 14 | ONE          |          2 | F     |
| 15 | ONE          |          2 | G     |
| 16 | ONE          |          2 | H     |
| 17 | ONE          |          2 | I     |
| 18 | ONE          |          2 | X     |
| 19 | ONE          |          2 | Y     |
| 20 | ONE          |          2 | Z     |
+----+--------------+------------+-------+

this demo

【讨论】:

  • 感谢您提供的代码示例,这对很多人都有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2010-12-06
相关资源
最近更新 更多