美好的一天。
在我的工作中,我发现了一个小问题。我认为我是更糟糕的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
答案 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和每个键定义 按订购顺序限定。