温故简单SQL行列转换
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sql代码
-- 创建表
CREATE TABLE T_Score(
ScoreId INT IDENTITY (1,1) NOT NULL,
StuName NVARCHAR(50),
Subject NVARCHAR(50),
Score INT
)
-- 插入数据
INSERT INTO T_Score(StuName,Subject,Score)
SELECT '李四','英语',88 UNION ALL
SELECT '李四','语文',99 UNION ALL
SELECT '李四','化学',78 UNION ALL
SELECT '李四','历史',82 UNION ALL
SELECT '李四','物理',98 UNION ALL
SELECT '王五','英语',89 UNION ALL
SELECT '刘萍','英语',77 UNION ALL
SELECT '刘萍','语文',68 UNION ALL
SELECT '王六','英语',81 UNION ALL
SELECT '马林','英语',84
--行列转换(显示数据)
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT StuName AS 姓名'
SELECT @SQL=@SQL+',SUM(CASE Subject WHEN '''+Subject+''' THEN Score ELSE 0 END) ['+Subject+']'
FROM (SELECT DISTINCT Subject FROM T_Score) AS tt
SELECT @SQL=@SQL+' FROM T_Score GROUP BY StuName'
EXEC(@SQL)