📅  最后修改于: 2023-12-03 15:23:27.706000             🧑  作者: Mango
当我们需要将多个列的值合并成一列时,可能需要将它们转换为多行。在 SQL Server 中,可以使用 UNPIVOT 操作来实现这一目的。
UNPIVOT 操作可以将多个列的值转换为一列,并将其与原始数据的其他列一起保留。UNPIVOT 操作执行的结果是一个新的、更长的表,该表包含两个新列:
假设我们有一个包含以下数据的表:
| Name | JanSales | FebSales | MarSales | |------|----------|----------|----------| | John | 1000 | 2000 | 1500 | | Tom | 2500 | 1800 | 1900 | | Jane | 3000 | 2800 | 1500 |
现在,我们想将这3列(JanSales、FebSales 和 MarSales)合并成一列,并将其与原始数据的其他列一起保留。我们可以使用以下代码来执行 UNPIVOT 操作:
SELECT Name, SalesMonth, SalesAmount
FROM
(SELECT Name, JanSales, FebSales, MarSales
FROM Sales) p
UNPIVOT
(SalesAmount FOR SalesMonth IN
(JanSales, FebSales, MarSales)
)AS unpvt;
上述 SQL 查询的输出结果如下:
| Name | SalesMonth | SalesAmount | |------|----------|----------| | John | JanSales | 1000 | | John | FebSales | 2000 | | John | MarSales | 1500 | | Tom | JanSales | 2500 | | Tom | FebSales | 1800 | | Tom | MarSales | 1900 | | Jane | JanSales | 3000 | | Jane | FebSales | 2800 | | Jane | MarSales | 1500 |
UNPIVOT 操作可以将多个列的值转换为一列,并将其与原始数据的其他列一起保留。在 SQL Server 中执行 UNPIVOT 操作的语法如下:
SELECT <Non-pivot column>, <Pivot column>, <Value column>
FROM
(<SourceTable>) p
UNPIVOT
(<Value column> FOR <Pivot column> IN
(<Column1>, <Column2>,...,<ColumnN>)
)AS <Alias>;
按照上述格式编写 SQL 查询,就可以将多列转换为 Rows。