成绩单、业绩表SQL(一个纵表变横表 一个用开窗函数)

 原始表:

name            course              score
-----------------------------------------
张三            语文                80
张三            数学                75
张三            外语                60
李四            语文                90
李四            数学                85
李四            外语                70
王五            语文                95
王五            数学                80
王五            外语                75


结果表:

姓名        语文        数学        外语
-----------------------------------------
张三        80          75          60
李四        90          85          70
王五        95          80          75

=========================================

原始表:

city          volume
---------------------
北京          16000
东莞          5000
上海          200000
广州          8500
湛江          100000

结果表:

城市          排名
---------------------
北京          3
东莞          5
上海          1
广州          4
湛江          2

SQL code 1:
 
  
select name, sum ( case when course = "语文" then score else 0 end ) "语文", sum ( case when course = "数学" then score else 0 end ) "数学", sum ( case when course = "外语" then score else 0 end ) "外语" from table1 group by name; select city, row_number() over ( order by volume desc ) "排名" from table2;
 
  
SQL code 2:
 
  
SELECT name, SUM (DECODE(course, ' 语文 ' ,score, 0 )), SUM (DECODE(course, ' 数学 ' ,score, 0 )), SUM (DECODE(course, ' 外语 ' ,score, 0 )) FROM tb1 GROUP BY name; SELECT city "城市",rownum "排名" FROM tb2 ORDER BY volume DESC
 
  
SQL code 3:
 
  
select name,max(case when course='语文' then score end) "语文", max(case when course='数学' then score end) "数学", max(case when course='外语' then score end) "外语" from table_name group by name;
select city "城市",row_number() over(order by volume desc) as "排名" from ww0924 order by rowid;

你可能感兴趣的:(成绩单、业绩表SQL(一个纵表变横表 一个用开窗函数))