巧用ORACLE中的分析函数row_number()

  • winmenaruto
  • (pangpang)
  • 等 级:
  • 结帖率:97.96%
楼主发表于:2009-08-05 14:03:02
Student表有三列,分别是姓名、课程、成绩
Name  Curricula    Mark
张三    语文        70
李四    数学        80
王朝    英语        59
城南    马哲        70
王朝    语文        90
。。。。。。。。。。。

我想得到的效果是,列出各个学科及格的人名:
语文    化学    数学
张三            李四
王朝

怎么弄呢?学科不止3门,可能有八门,后面都省略不写了   

 

 

     

SQL code
   
   
   
   
-- TEST DATA: Name Curricula Mark 张三 语文 70 李四 数学 80 王朝 英语 59 城南 马哲 70 王朝 语文 90 -- SQL: select sn, max ( case when Curricula = ' 语文 ' then name end ) 语文, max ( case when Curricula = ' 数学 ' then name end ) 数学, max ( case when Curricula = ' 英语 ' then name end ) 英语, max ( case when Curricula = ' 马哲 ' then name end ) 马哲 from ( select name,curricula,mark, row_number() over (partition by curricula order by name) sn from t where mark > 59 ) group by sn -- RESULT: 语文 数学 英语 马哲 1 张三 李四 城南 2 王朝

你可能感兴趣的:(oracle,sql)