SQL竖表转换成横表统计

2014-11-24 16:29:07 · 作者: · 浏览: 0
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