SQL语句。不同的行号。没有PL / SQL

时间:2013-10-19 22:47:37

标签: sql oracle sqlplus

美好的一天。 在我的工作中,我发现了一个小问题。我认为我是更糟糕的SQL人。我解决不了两天。 我有一个小的sql表,包括学生,班级和学校的信息 我需要每个班级中每个学生的每个新班级(班级和学校)的序列号。没有PL / SQL

School       Class          Name
first        1b             Smith 
first        1b             Jones 
first        1b             Willams 
second       1a             Taylor 
second       1b             Brown 
second       1b             Davies 

表I我需要

Number        School       Class  Name 
   1          first        1b     Smith
   2          first        1b     Jones
   3          first        1b     Willams
   1          second       1a     Taylor
   1          second       1b     Brown
   2          second       1b     Davies

1 个答案:

答案 0 :(得分:1)

我知道你已经解决了这个问题,但我认为任何人都希望看到完整的解决方案

SQL小提琴演示:http://sqlfiddle.com/#!4/a6756/8

SELECT 
   row_number() over (partition BY school, class ORDER BY school, class) as nr
   , s.*
from students s

现在只计算学校和班级的行数。

每当我处理分析函数时,我都要抓一点头,并且通常总是参考这个页面,我找到了一个很好的教程和记忆复习:http://www.orafaq.com/node/55

编辑:

根据Clockwork-Muse的评论,我删除了关于分析函数中order by的内容并引用Oracle文档的说法:

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm#i81407

  

<强> order_by_clause生成

     

使用order_by_clause指定数据在a中的排序方式   划分。对于所有分析函数,您可以在a中对值进行排序   多个键上的分区,每个键由value_expr和每个键定义   按订购顺序限定。