1 当然可以,我会用一个简单的例子来解释如何使用SQL的PIVOT操作进行行转列。 2 3 假设我们有一个销售数据表SalesData,它记录了不同产品在不同年份的销售额。表结构如下: 4 5 6 +----+---------+-------+--------+ 7 | ID | Product | Year | Sales | 8 +----+---------+-------+--------+ 9 | 1 | A | 2020 | 100 | 10 | 2 | A | 2021 | 150 | 11 | 3 | B | 2020 | 200 | 12 | 4 | B | 2021 | 250 | 13 | 5 | C | 2020 | 120 | 14 | 6 | C | 2021 | 180 | 15 +----+---------+-------+--------+ 16 17 18 我们想要将这个表转换为以下格式,其中年份成为列,产品成为行,销售额则填充到相应的单元格中: 19 20 21 +---------+-------+-------+ 22 | Product | 2020 | 2021 | 23 +---------+-------+-------+ 24 | A | 100 | 150 | 25 | B | 200 | 250 | 26 | C | 120 | 180 | 27 +---------+-------+-------+ 28 29 30 下面是使用PIVOT的SQL查询语句,以及每一行代码的解释: 31 32 sql 33 34 SELECT * 35 FROM 36 ( 37 SELECT Product, Year, Sales 38 FROM SalesData 39 ) AS SourceTable 40 PIVOT 41 ( 42 SUM(Sales) 43 FOR Year IN ('2020' 2020, '2021' 2021) 44 ) AS PivotTable; 45 46 47 解释: 48 49 SELECT *:选择所有列。在这里,它用于选择PIVOT操作的结果。 50 51 2-5. FROM (SELECT Product, Year, Sales FROM SalesData) AS SourceTable: 52 53 FROM SalesData:从SalesData表中选择数据。 54 SELECT Product, Year, Sales:选择我们需要的列:产品名称、年份和销售额。 55 AS SourceTable:将选择的数据作为一个临时表SourceTable,以便在PIVOT操作中使用。 56 PIVOT:这是SQL Server中用于将行转换为列的关键字。 57 58 7-9. (SUM(Sales) FOR Year IN ([2020], [2021])): 59 60 SUM(Sales):对销售额进行求和。因为我们可能有多条记录对应同一个产品和年份,所以我们需要使用聚合函数来合并这些记录。 61 FOR Year IN ([2020], [2021]):这里指定了要转换为列的列名(Year),并列出了要转换的特定年份(2020和2021)。这些年份将成为结果集中的列标题。 62 AS PivotTable:将PIVOT操作的结果作为一个名为PivotTable的临时表。 63 64 最后,SELECT *将从PivotTable中选择所有列,这将给我们期望的转换后的结果。 65 66 请注意,PIVOT是SQL Server特有的功能,不是所有数据库系统都支持。如果你使用的是其他数据库(如MySQL、PostgreSQL等),你可能需要使用不同的方法或函数来实现相同的行转列操作。
标签:Year,Sales,转列,2020,2021,sql,pivot,SELECT,PIVOT From: https://www.cnblogs.com/lidar/p/18068187