将行转换为列
在本节课中,您学习了 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 ___