首页 > 数据库 >sql使用pivot进行行转列

sql使用pivot进行行转列

时间:2024-03-12 14:11:39浏览次数:28  
标签:Year Sales 转列 2020 2021 sql pivot SELECT 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等),你可能需要使用不同的方法或函数来实现相同的行转列操作。

 

标签:Year,Sales,转列,2020,2021,sql,pivot,SELECT,PIVOT
From: https://www.cnblogs.com/lidar/p/18068187

相关文章

  • MySQL 精通与优化
    目录1.数据库管理与优化1.1.用户管理和权限控制1.2.数据库的备份和恢复1.3.数据库的性能优化和调优1.4.锁定和事务管理2.高可用性与容错性2.1.主从复制(Master-SlaveReplication)2.2.主主复制(Master-MasterReplication)2.3.数据库集群技术3.实践与项目案例3.1.......
  • typeorm mysql blob 存储base64
    typeormmysqlblob存储base64在TypeORM中,要将Base64数据存储到MySQL数据库的BLOB字段,您需要先将Base64字符串转换为Buffer,然后使用TypeORM的实体管理器来保存。以下是一个简单的例子:首先,定义您的实体:  import{Entity,PrimaryGeneratedColumn,Column}from......
  • mysql for update是锁表还是锁行
    转载至我的博客https://www.infrastack.cn,公众号:架构成长指南在并发一致性控制场景中,我们常常用forupdate悲观锁来进行一致性的保证,但是如果不了解它的机制,就进行使用,很容易出现事故,比如forupdate进行了锁表导致其他请求只能等待,从而拖垮系统,因此了解它的原理是非常必要的,......
  • WSL基本使用,Ubuntu->docker->MySQL8
    适用于Linux的Windows子系统(WSL)可让开发人员直接在Windows上按原样运行GNU/Linux环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。基本使用安装#此命令将启用运行WSL并安装Linux的Ubuntu发行版所需的功能。wsl--inst......
  • oracle系统表查询SQL语句
    oracle查询用户下的所有表select*fromall_tab_comments--查询所有用户的表,视图等select*fromuser_tab_comments   --查询本用户的表,视图等select*fromall_col_comments--查询所有用户的表的列名和注释.select*fromuser_col_comments--查询本用户的表的列......
  • Sql Server 查询数据库表结构
    记录一下,感觉之后有可能会用得上SELECTCASEWHENsc.column_id=1THENso.nameELSE''END表名,CASEWHENsc.column_id=1THENISNULL(pt.value,'')ELSE''END表说明,sc.column_id字段序号,sc.name字段名,ISNULL(pc.value,''......
  • MySQL主从延迟原理详解
    前言在生产环境中,为了满足安全性,高可用性以及高并发等方面的需求,基本上采用的MySQL数据库架构都是MHA、MGR等,最低也得是一主一从的架构,搭配自动切换脚本,实现故障自动切换。上述架构都是通过集群主从复制(Master-Slave)的方式来同步数据。MySQL集群简单架构图:说到主从同步,离不开bi......
  • LeetCode - 高频SQL50题(基础版)部分题解(上)
    1581.进店却未进行过交易的顾客原题:https://leetcode.cn/problems/customer-who-visited-but-did-not-make-any-transactions/题意:有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案,来查找这些顾客的ID(customer_id),以及他们只光顾不交易的次数(count_no_trans......
  • 部署测试平台-使用docker安装mysql
    1.拉取mysql5.7镜像:dockerpullmysql:5.72.新建数据库挂载目录:mkdir-p/root/data/mysql5.7/conf   配置文件mkdir-p/root/data/mysql5.7/data   数据库数据目录mkdir-p/root/data/mysql5.7/log   数据库日志3.把配置文件my.cnf放到/root/data/m......
  • mysql 索引
    索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系的数据结构,通过索引查询可以提高查询的效率。举个例子:把一个数据表当做一个图书馆,数据表中的一行数据当做一本书,在没有索引的情况下,想要找某一本书时,几乎需要将整个图书馆的书找一遍。当建立了索引后,就......