sql使用pivot进行行转列

 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等),你可能需要使用不同的方法或函数来实现相同的行转列操作。

 

posted @ 2024-03-12 14:08  贩卖长江水  阅读(48)  评论(0编辑  收藏  举报