📜  没有聚合的 sql pivot - SQL (1)

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

没有聚合的 SQL Pivot

在 SQL 中,Pivot 操作可以将行转换成列,或将列转换成行。可以使用 Pivot 操作来汇总数据并生成透视表。通常情况下,Pivot 操作需要进行聚合计算,例如求和、计数等。但是,有时候需要对数据进行转换而不进行聚合计算,本文将介绍如何在 SQL 中进行没有聚合的 Pivot 操作。

实现没有聚合的 Pivot

在 SQL Server 中,可以通过使用 PIVOT 和 UNPIVOT 语句来实现 Pivot 操作。但是,在进行 Pivot 操作之前,需要进行数据的准备工作,以便能够正确地转置数据。

在下面的示例中,考虑有一个名为 SalesData 的表,其中包含每个月每个销售员的销售数据。表的结构如下:

| Month | SalesPerson | SalesAmount | | ----- | ----------- | ----------- | | 1 | John Doe | 10000 | | 1 | Jane Doe | 15000 | | 1 | Bob Smith | 12000 | | 2 | John Doe | 13000 | | 2 | Jane Doe | 17000 | | 2 | Bob Smith | 11000 |

要将上述数据进行 Pivot 操作,我们需要将 SalesPerson 列中的值转换为列名,并将 SalesAmount 列中的值放置到对应的列中。下面是一种实现 Pivot 操作的方法:使用 CASE 语句和聚合函数:

SELECT Month,
       SUM(CASE WHEN SalesPerson = 'John Doe' THEN SalesAmount ELSE 0 END) AS [John Doe],
       SUM(CASE WHEN SalesPerson = 'Jane Doe' THEN SalesAmount ELSE 0 END) AS [Jane Doe],
       SUM(CASE WHEN SalesPerson = 'Bob Smith' THEN SalesAmount ELSE 0 END) AS [Bob Smith]
FROM SalesData
GROUP BY Month

在这个示例中,我们使用了聚合函数 SUM 来计算每个月的销售数据。在 CASE 语句中,我们检查每个 SalesPerson 的值,并使用 0 来替代不匹配的值。这样就可以将数据转换为透视表,并将每个月的销售数据按销售员分类。

总结

在 SQL 中,通过使用 Pivot 操作可以将行转换为列,或将列转换为行。在进行 Pivot 操作之前,需要进行数据的准备工作,以便能够正确地转置数据。通过使用 CASE 语句和聚合函数,可以实现没有聚合的 Pivot 操作。