SQL Server中的透视和逆透视

SQL Server中的透视和逆透视
最新回答
江心薄雾起

2020-08-05 21:11:04

WITH temptb AS(

SELECT '张三' 姓名,'语文' 科目,88 分数

UNION ALL

SELECT '张三' 姓名,'数学' 科目,83 分数

UNION ALL

SELECT '张三' 姓名,'英语' 科目,78 分数

UNION ALL

SELECT '李四' 姓名,'语文' 科目,92 分数

UNION ALL

SELECT '李四' 姓名,'数学' 科目,84 分数

UNION ALL

SELECT '李四' 姓名,'英语' 科目,86 分数

UNION ALL

SELECT '王五' 姓名,'语文' 科目,90 分数

UNION ALL

SELECT '王五' 姓名,'数学' 科目,89 分数

UNION ALL

SELECT '王五' 姓名,'英语' 科目,87 分数

)

SELECT * FROM temptb

2.1 T-SQL直接转换

SELECT 姓名,

SUM(CASE WHEN 科目 ='语文' THEN 分数 END) AS 语文,

SUM(CASE WHEN 科目 ='数学' THEN 分数 END) AS 数学,

SUM(CASE WHEN 科目 ='英语' THEN 分数 END) AS 英语

FROM temptb

GROUP BY 姓名

2.2 PIVOT转换

SELECT 姓名, 语文, 数学, 英语

FROM (SELECT 姓名, 科目, 分数

FROM temptb)AS D

Pivot(Sum(分数) for 科目 in (语文,数学, 英语)) As P;

WITH temptb AS(

SELECT  '张三' 姓名,88 语文,83 数学,78 英语

UNION ALL

SELECT '李四' 姓名,92 语文,84 数学,86 英语

UNION ALL

SELECT '王五' 姓名,90 语文,89 数学,87 英语  )

SELECT * FROM temptb

2.1 T-SQL直接转换

SELECT 姓名,科目,

CASE科目 WHEN '语文' THEN[语文]

WHEN '数学' THEN[数学]

WHEN '英语' THEN[英语] END分数

FROM temptb

CROSS JOIN(VALUES('语文'),('数学'),('英语')) AS 科目(科目)

2.2 UNPIVOT转换

SELECT姓名,科目,分数 FROMtemptb

UNPIVOT(分数 FOR 科目 IN([语文],[数学],[英语])) AS U