Sql server的行转列

业务场景:有如下一张表,希望汇总成下面的查询结果。
原始数据表 EmployeeTable:一个员工身兼多个岗位。
Employee    Role    Level
张三          工程师     3
张三          经理         5
李四         工程师      2
李四         主管         4
王五         操作工     8
希望查询结果:
Employee    工程师    经理    主管    操作工
张三                3               5    
李四               2                         4
王五                                                     8

其实这个需求就是一个行转列的过程。
1.传统的方法:case when
SELECT Employee,
MAX(CASE ROLW  WHEN '工程师' THEN LEVEL ELSE '' END) AS 工程师,
MAX(CASE ROLW  WHEN '经理' THEN LEVEL ELSE '' END) AS 经理,
MAX(CASE ROLW  WHEN '主管' THEN LEVEL ELSE '' END) AS 主管,
MAX(CASE ROLW  WHEN '操作工' THEN LEVEL ELSE '' END) AS 操作工
FROM EmployeeTable GROUP BY Employee    
缺点是:每添加一个岗位,这个查询就需要更新


2.方法二:PIVOT搭配聚合函数:
使用透视表,重新聚合实现行转列
SELECT *
FROM (
SELECT 
Employee, 
Role, 
Level
FROM EmployeeTable
) AS SourceTable
PIVOT (
MAX(Level)  -- 使用聚合函数(如 MAX/AVG)处理同一员工的重复岗位,作为值显示
FOR Role IN (
[工程师], [经理], [主管],[操作工]  -- 列出所有岗位名称, 指名道姓让这一列做新列
)
) AS PivotTable;
缺点是:和方法一样,每添加一个岗位,这个查询就需要更新

3.方法三:PIVOT搭配聚合函数+动态
先拼接成sql查询语句,然后再用sp_executesql执行获得结果。
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
-- 动态获取所有岗位名称
SELECT @columns = (
SELECT DISTINCT QUOTENAME(Role) + ','  -- 处理特殊字符(如空格)
FROM EmployeeTable
FOR XML PATH('')
);
SET @columns = LEFT(@columns, LEN(@columns) - 1);  -- 移除末尾逗号

-- 生成动态 PIVOT 查询
SET @sql = N'
SELECT Employee, ' + @columns + '
FROM (
SELECT Employee, Role, Level
FROM EmployeeTable
) AS SourceTable
PIVOT (
MAX(Level)
FOR Role IN (' + @columns + ')
) AS PivotTable;';

-- 执行动态 SQL
EXEC sp_executesql @sql;

实现动态查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/94130.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/94130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某市-2025【网安·论道】决赛-misc1-翻转-wp

题目给了个图片以及一句提示 “斯蒂xx会帮助你” 直接就能想到 ste 开头的那几个工具,但是我比赛时候电脑什么ste开头的工具都没装,只能回来做了。 └─$ exiftool x.jpeg ExifTool Version Number : 13.00 File Name : …

[系统架构设计师]大数据架构设计理论与实践(十九)

[系统架构设计师]大数据架构设计理论与实践(十九) 一.传统数据处理系统的问题 1.传统数据库的数据过载问题 传统应用的数据系统架构设计时,应用直接访问数据库系统。当用户访问量增加时,数据库无 法支撑日益增长的用户请求的负载&…

UniAD

1. 算法动机及开创性思路 1)UniAD算法简介 算法全称:Planning-oriented Autonomous Driving核心特点: 统一框架整合感知、预测、规划模块CVPR 2023最佳论文采用查询(query)方式连接各模块 名称含义: Unified:统一多模块…

ESP-NOW详解(esp-idf)

esp-now目前主要支持单播和广播,广播地址为ff:ff:ff:ff:ff:ff,广播可以向范围内所有拥有esp-now接收的设备发送数据 注意事项,网络模式是可以设置网络mac地址的,在单播中,目标设备网络模式选择为ap时,mac地址会发生改…

`strlen` 字符串长度函数

1) 函数的概念与用途 strlen 是 C 语言标准库中最基础且使用最频繁的字符串处理函数之一,它的名字来源于"string length"(字符串长度)。这个函数的功能非常明确:计算一个以空字符结尾的字符串的长度。 可以将 strlen 想…

TorchInductor - Introduction

PyTorch 2.x通过TorchDynamo通过Python Bytecode的动态变换实现了图捕获功能,需要搭配一个Compiler Backend完成图编译。 Pytorch尝试集成了多个后端,并使用一个轻量级的autotuner来选择最优的后端图编译结果。这个解决方案存在2个问题: 这…

Adobe Illustrator默认键盘快捷键

目录 默认键盘快捷键 常用的快捷键 处理文档 选择工具 查看图稿 处理所选对象 绘制 编辑形状 处理实时上色组 处理对象 创建可变宽度点 处理文字 使用面板 动作面板 “画笔”面板 “字符”和“段落”面板 “颜色”面板 “渐变”面板 “图层”面板 “色板”…

「数据获取」《中国能源统计年鉴》(1986-2023)(获取方式看绑定的资源)

01、数据简介一、年鉴基本定位与发展历程《中国能源统计年鉴》作为一部权威性极强的能源领域资料典籍,始终以全面、精准反映中国能源建设推进、生产运行、消费态势以及供需平衡状况为核心使命。其编纂工作发轫于 1986 年,最初由国家统计局工业交通统计司…

SpringBoot3系列---【SpringBoot3集成sqlite】

SpringBoot3集成sqlite 1.引入pom.xml <dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.34.0</version></dependency><dependency><groupId>com.…

头部 TTS 开源项目深度对比

语音合成&#xff08;TTS&#xff09;开源项目是技术研究与产业落地的核心支撑&#xff0c;不同项目因技术路线、设计目标差异&#xff0c;在语言覆盖、合成自然度、可扩展性等方面表现悬殊。本文选取当前开源生态中应用最广、影响力最大的五大 TTS 项目——MaryTTS、Coqui TTS…

可视化-模块1-HTML-02

1-新建一个HTML文档&#xff0c;命名为&#xff1a;week1-12-<h1>标签<body><h1>这是标题 1</h1> <h2>这是标题 2</h2> <h3>这是标题 3</h3> <h4>这是标题 4</h4> <h5>这是标题 5</h5> <h6>这是…

搜索算法在实际场景中的应用

1. 数据库系统 B+树索引 应用场景:关系型数据库(MySQL、PostgreSQL等)的索引实现 算法特点: 平衡多路搜索树,优化磁盘I/O 支持范围查询和排序操作 典型实现: CREATE INDEX idx_name ON users(last_name); 哈希索引 应用场景:键值存储(Redis、Memcached)、等值查询 算…

基础IO

目录 一、进程和文件的关系 二、背景补充 三、打开文件接口 (1) FILE *fopen(const char* filename , const char *mode) &#xff08;2&#xff09;open 系统调用 文件描述符 open和fopen的关系 &#xff08;3&#xff09;size_t fwrite&#xff08;const void * ptr, …

SpringBoot快速上手

SpringBoot快速上手 环境准备 IDEA版本: 社区版:2021.1-2022.1.4 专业版:无要求 Maven 官方对于Maven的描述: Maven是一个项目管理工具,基于POM(Project Object Model,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告文档和项目管理工具软件. 人…

GitHub Actions workflow最佳实践

使用 GitHub Actions Workflow 时&#xff0c;遵循最佳实践可以显著提升自动化效率、安全性和可维护性。以下是经过实践验证的核心最佳实践&#xff0c;涵盖配置设计、性能优化、安全防护等维度&#xff0c;并附具体示例&#xff1a; 一、工作流组织与触发优化 1. 拆分工作流&a…

JAVA读取项目内的文件或图片

一、读取resources下的文件或图片&#xff1b;文件或图片位置&#xff1a;代码&#xff1a;InputStream fis Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" xxx.jpg);二、读取项目内任意位置的文件或图片。文件或图片位置&…

Python如何将两个列表转化为一个字典

一、使用zip函数 zip函数是Python内置的一个强大工具&#xff0c;它可以将多个迭代器&#xff08;如列表、元组等&#xff09;“压缩”成一个迭代器&#xff0c;其中每个元素都是一个元组。使用zip函数将两个列表转换为字典是最常见的方法。 1、基本用法 keys [a, b, c] value…

Vue 3 useModel vs defineModel:选择正确的双向绑定方案

&#x1f4d6; 概述 useModel() 是 Vue 3.4 版本中引入的一个组合式 API 辅助函数&#xff0c;它是驱动 defineModel() 的底层实现。这个函数主要用于在非单文件组件中实现双向数据绑定&#xff0c;特别是在使用原始的 setup() 函数时。 ⚠️ 重要提示&#xff1a;如果使用 <…

数据库备份sql文件过大,phpAdmin无法执行Sql

数据库导出为sql文件&#xff0c;文件太大导致无法再Sql query执行&#xff0c;可使用命令行执行&#xff1a; windows系统&#xff1a; 1.切换到mysql 安装目录的bin目录下 cd C:\xampp\mysql\bin 2.执行备份sql还原mysql数据库 mysql -u root -p databasename < C://backu…

三格电子——ModbusTCP 转 Profinet 主站网关应用实例

型号&#xff1a;SG-TCP- Profinet(M)一、使用场景ModbusTCPClient 通过 ModbusTCP 控制 Profinet 接口设备&#xff0c; Profinet 接口设备接入DCS/工控机等。产品是ModbusTCP和Profinet(M)网关&#xff08;以下简称网关&#xff09;&#xff0c;使用数据映射 方式工作。 本产…