如何使用SQL Server PIVOT函数实现行转列操作?
摘要:SqlServer 中行转列PIVOT函数用法 前言 最近在面试的时候,碰到了手写sql的题目,这让我这个面向AI的程序员着实难看。只见我面露难色,绞尽脑汁的情况下,终于还是放弃了。 这道题目不难,但是由于平时几乎没有遇到行转列的情况,导致
SqlServer 中行转列PIVOT函数用法
前言
最近在面试的时候,碰到了手写sql的题目,这让我这个面向AI的程序员着实难看。只见我面露难色,绞尽脑汁的情况下,终于还是放弃了。
这道题目不难,但是由于平时几乎没有遇到行转列的情况,导致在手写时忘记了PIVOT函数怎么使用😩。
面试准备不充分给自己找借口,菜就多练,不会写就别写。
题目描述
下面请看题:
假设有以下表 EmpCanlendar:
Name
CalendarDate
ClassName
张三
2005-05-01
日班
张三
2005-05-02
日班
张三
2005-05-03
夜班
李四
2005-05-01
夜班
李四
2005-05-02
日班
...
...
...
输出结果:
Name
D20050501
D20050502
D20050503
D20050504
D20050505
张三
日班
日班
日班
日班
夜班
李四
日班
日班
日班
NULL
NULL
王五
NULL
夜班
夜班
NULL
NULL
PIVOT函数简单介绍
PIVOT 是 SQL Server 中的一种功能,用于将行数据转换为列数据(即行转列)。它通常用于将某一列的唯一值作为新列,并将对应的值填充到这些新列中。PIVOT 是数据透视表的一种实现方式,非常适合用于统计和报表场景。
PIVOT 的基本语法
SELECT
[非透视列],
[透视值1], [透视值2], ..., [透视值N]
FROM
(
-- 子查询:提供原始数据
SELECT [非透视列], [透视列], [值列]
FROM 表名
) AS 源表
PIVOT
(
聚合函数(值列) -- 例如 SUM、COUNT、MAX 等
FOR 透视列 IN ([透视值1], [透视值2], ..., [透视值N])
) AS 透视表
参数
非透视列:
不需要转换的列,这些列的值将作为结果表的行标识。
透视列:
需要转换为新列的列。
值列:
需要填充到新列中的值。
聚合函数:
对值列进行聚合操作,例如 SUM、COUNT、MAX 等。
如果值列不需要聚合,可以使用 MAX 或 MIN。
透视值:
透视列中的唯一值,这些值将成为新列的名称。
