SQL竖表转换成横表统计

转换前:

id name subject score
1 张三 语文 80
2 张三 数学 90
3 李四 数学 85
4 张三 英语 75
5 李四 语文 85
6 李四 英语 80

转换后:

姓名 语文 数学 英语
李四 85 85 80
张三 80 90 75

 

 

查询: 

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

 

 

查询:

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

 

posted @ 2012-04-19 14:40  黄靖洆  阅读(2520)  评论(0编辑  收藏  举报