SQL 行转列的运用
适用场景:需要将行数据转换成列数据
例子:
现在有一个学生的成绩表
但是我们需要将每个学生的成绩汇集到一条数据上,这时候就可以用到行转列。
代码如下
一、不使用 PIVOT
1 SELECT 2 MAX('学生'+CONVERT(NCHAR(10),[Stu_ID])) AS 学生 3 ,MAX(CASE WHEN Course='语文' THEN ISNULL(Score,0) ELSE 0 END) AS 语文成绩 4 ,MAX(CASE WHEN Course='数学' THEN ISNULL(Score,0) ELSE 0 END) AS 数学成绩 5 ,MAX(CASE WHEN Course='英语' THEN ISNULL(Score,0) ELSE 0 END) AS 英语成绩 6 ,CONVERT(DECIMAL(4,1),ROUND(AVG(Score),1)) AS 平均成绩 7 FROM [EFDemo].[dbo].[Table_1] 8 GROUP BY Stu_ID
二、使用 PIVOT
SELECT * FROM [EFDemo].[dbo].[Table_1] AS P PIVOT(MAX(P.Score) FOR P.Course IN ([语文],[数学],[英语]) AS T
转换后查询到的结果集
喜欢 C#、SQL、Web