SQL Server 行转列(Pivot)和列转行(Unpivot)总结
在SQL Server中,有时需要将一些行数据转换成列数据的方式呈现,或者将列数据转换成行数据的方式呈现,这就需要使用行转列和列转行的功能。
行转列(Pivot)
行转列是将多行数据转换成一行数据,对于这种需求,我们可以使用PIVOT
函数。PIVOT
函数将行数据转换成列数据,我们需要指定聚合函数来合并转换后的数据。
示例如下:
SELECT *
FROM (
SELECT year, product, sales
FROM sales
) s
PIVOT (
SUM(sales)
FOR product IN ([Product A], [Product B], [Product C])
) p
上述示例中,我们从sales
表中选择了year
, product
, sales
三个字段,然后使用PIVOT
函数将product
字段中包含的值(Product A
, Product B
, Product C
)转换成了三个新的列,其中sales
是聚合字段的名称,使用SUM
函数进行了聚合。
列转行(Unpivot)
列转行则是将多列数据转换成一列数据,对于这种需求,我们可以使用UNPIVOT
函数。UNPIVOT
函数将列数据转换成行数据,我们需要指定需要转换的列名和需要生成的列名。
示例如下:
SELECT *
FROM (
SELECT [Year], [Product A], [Product B], [Product C]
FROM sales
) s
UNPIVOT (
sales FOR product IN ([Product A], [Product B], [Product C])
) up
上述示例中,我们从sales
表中选择了Year
, Product A
, Product B
, Product C
四个字段,然后使用UNPIVOT
函数将Product A
, Product B
, Product C
这三列转换成了一列,其中product
是新生成列的名称,sales
是原始数据中的值。
总结
在SQL Server中,行转列和列转行是常用的数据处理方式之一。PIVOT
函数用于将行数据转换为列数据,UNPIVOT
函数用于将列数据转换为行数据。使用这两个函数可以提高SQL Server数据处理的效率和灵活性,能够满足各种业务需求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sqlserver行转列(pivot) 列转行(unpivot)总结 - Python技术站