📜  sql server 将行转为列 - SQL (1)

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

SQL Server 将行转为列

在SQL Server中,可以使用PIVOT和UNPIVOT操作将行和列进行转换。这在某些情况下非常有用,尤其是在进行聚合查询时。

PIVOT操作

PIVOT操作是将行转为列的过程,它可以将数据从表中的行中转换为列,并在转换后的列中对这些行进行汇总。以下是一个示例:

SELECT SalesPerson, [January], [February], [March], [April], [May], [June]
FROM (SELECT SalesPerson, SalesAmount, DATENAME(MONTH, OrderDate) AS OrderMonth
      FROM Sales) AS s
PIVOT(SUM(SalesAmount) FOR OrderMonth IN ([January], [February], [March], [April], [May], [June])) AS p;

上面的查询将销售表中的销售人员、销售额和订单日期转换为列,并将每个月份的销售额列在一起。该查询生成的输出包括每个销售人员在每个月份的销售额和总销售额。

UNPIVOT操作

UNPIVOT操作是将列转为行的过程,它可以将表中的列转换为行,并为转换后的每行提供相关的值。以下是一个示例:

SELECT EmployeeName, Month, SalesAmount
FROM Sales
UNPIVOT(SalesAmount FOR Month IN ([January], [February], [March], [April], [May], [June])) AS u
INNER JOIN Employees ON Sales.SalesPerson = Employees.EmployeeID;

上面的查询将销售人员、月份和销售额转换为行,并将每个行与Employee表进行联接。该查询生成的输出包括每个销售员在每个月份的销售额和总销售额。

总结

在SQL Server中,PIVOT和UNPIVOT操作是将行和列进行转换的强大工具。它们可以用于宽表转长表和长表转宽表的情况。在使用PIVOT和UNPIVOT操作时,需要仔细考虑如何选择合适的列和行,以便生成正确的输出。别忘记使用别名并正确地编写聚合函数,以便正确地汇总行或列数据。