开始使用免费开始使用

将行转换为列

在本节课中,您学习了 PIVOT 可以将某一列中的唯一值转换为多列。

分析 paper_shop_monthly_sales 的数据后,您发现该表的结构不适合您要制作的报告。

您希望生成如下所示的报告:

|year_of_sale|notebooks|pencils|crayons|
|------------|---------|-------|-------|
| 2018       | 150     | 150   | 80    |
| 2019       | 230     | 130   | 170   |

也就是说,您要把当前行中的数据转换为列中的数据,并按年度汇总单位数量。

正如您在前面练习中学到的,需要拆分产品名称和单位数量。这一步已在子查询中完成,请查看。

本练习是课程的一部分

在 SQL Server 数据库中清洗数据

查看课程

练习说明

  • 为每个产品选择透视后的列。
  • PIVOT 运算中包含对单位数量的求和。
  • FOR 子句之后,包含将成为列名的值所在的列名。
  • PIVOT 运算起名为 paper_shop_pivot

交互式实操练习

通过完成这段示例代码来试试这个练习。

SELECT
	year_of_sale,
    -- Select the pivoted columns
	___, 
	___, 
	___
FROM
   (SELECT 
		SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) product_name, 
		CAST(SUBSTRING(product_name_units, charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units,	
		year_of_sale
	FROM paper_shop_monthly_sales) sales
-- Sum the units for column that contains the values that will be column headers
PIVOT (SUM(___) FOR ___ IN (notebooks, pencils, crayons))
-- Give the alias name
AS ___
编辑并运行代码