> 文章列表 > sql pivot

sql pivot

sql pivot

什么是.sql pivot?

.sql pivot是一种SQL数据转换技术,用于将长的表格(包含多个列)转换为宽的表格(只有一个值列)。在数据仓库、商业智能和大数据分析等地方,pivot操作非常常见。

.sql pivot的语法

.sql pivot的语法如下:

SELECT 非聚合列, [pivot列1], [pivot列2], … [value列]

FROM 数据源表名

PIVOT

(

AGG(value列) FOR [pivot列] IN ([pivot列值1], [pivot列值2], … [pivot列值n])

) AS [别名]

其中,非聚合列是结果中需要显示的列,pivot列是需要进行列转行的列,value列是需要进行聚合的列,[pivot列值1]等是列转行后的列名。

示例使用

我们通过一个示例来说明如何使用.sql pivot将长表格转换为宽表格:

假设我们有一个订单明细表格:

OrderID Product Quantity Price
1 Apple 2 1.5
1 Banana 3 2.0
2 Orange 4 1.0
2 Apple 1 1.5

我们想要将其转换为以下形式:

OrderID Apple Banana Orange
1 3 2 0
2 1 0 4

我们可以使用以下SQL语句实现:

SELECT OrderID, [Apple], [Banana], [Orange]

FROM (SELECT OrderID, Product, Quantity FROM OrderDetail) AS ODT

PIVOT(SUM(Quantity) FOR Product IN ([Apple], [Banana], [Orange])) AS PVT

其中,非聚合列是OrderID,pivot列是Product,value列是Quantity。

优势和劣势

使用.sql pivot的优势如下:

  • 可以让数据变得更易读、更容易分析。
  • 使用熟悉的SQL语句,语法简单。

但.sql pivot也有劣势:

  • 可能导致性能问题。
  • 仅适用于需要将列转换为行的场景。
  • 某些数据库不支持此操作。

.sql pivot和.unpivot的区别

.sql pivot和.unpivot是两种互补的操作,.unpivot是否定pivot操作。

.unpivot的作用是将列转换为行,而不是行转换为列。例如,我们可以将上面的宽表格转换为长表格:

OrderID Product Quantity
1 Apple 3
1 Banana 2
1 Orange 0
2 Apple 1
2 Banana 0
2 Orange 4

我们可以使用以下SQL语句实现:

SELECT OrderID, Product, Quantity

FROM (SELECT [1], [2], [3], [4], [5], [6] FROM (SELECT * FROM WideTable) AS WT

UNPIVOT(Quantity FOR Product IN ([Apple], [Banana], [Orange])) AS UPT

WHERE Quantity != 0;

.unpivot的优势和劣势与.sql pivot类似。