SQL竖表转换成横表统计
转换前
id
name
subject
score
1
张三
语文
80
2
张三
数学
90
3
李四
数学
85
4
张三
英语
75
5
李四
语文
85
6
李四
英语
80
转换后:
姓名
语文
数学
英语
李四
85
85
80
张三
80
90
75
Java代码
SELECT * FROM(
SELECT name as [姓名],
SUM(CASE WHEN [subject] = '语文' THEN score END) AS [语文],
SUM(CASE WHEN [subject] = '数学' THEN score END) AS [数学],
SUM(CASE WHEN [subject] = '英语' THEN score END) AS [英语]
FROM [user] GROUP BY name
) temp
平均分(with cube):
姓名
语文
数学
英语
李四
85
85
80
张三
80
90
75
NULL
82
87
77
Java代码
SELECT [姓名],AVG([语文])as [语文],AVG([数学])as [数学],AVG([英语])as [英语] FROM(
SELECT name as [姓名],
SUM(CASE WHEN [subject] = '语文' THEN score END) AS [语文],
SUM(CASE WHEN [subject] = '数学' THEN score END) AS [数学],
SUM(CASE WHEN [subject] = '英语' THEN score END) AS [英语]
FROM [user] GROUP BY name
) temp group by [姓名] with cube