📜  在sql server中将多列转换为ROws - SQL(1)

📅  最后修改于: 2023-12-03 15:23:27.706000             🧑  作者: Mango

在 SQL Server 中将多列转换为 Rows

当我们需要将多个列的值合并成一列时,可能需要将它们转换为多行。在 SQL Server 中,可以使用 UNPIVOT 操作来实现这一目的。

什么是 UNPIVOT 操作

UNPIVOT 操作可以将多个列的值转换为一列,并将其与原始数据的其他列一起保留。UNPIVOT 操作执行的结果是一个新的、更长的表,该表包含两个新列:

  1. 一列是前原来的列,用来命名从源表中收集值的列
  2. 一列是新的列,该列包含从源列的列值和列名派生的值
示例

假设我们有一个包含以下数据的表:

| 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。