首页 > 解决方案 > 解析函数:ROW_NUMBER( )

问题描述

我有一张“发票”表

id integer Primary key
customer_id Integer
total Number (*,2)

查询是向别名为“SNO”的每个客户显示所有 customer_id、total 和 running 序列号。并且记录应该根据customer_id升序显示,然后按SNO显示。

提示:

我写了以下查询:

Select customer_id,
       total,
       ROW_NUMBER( ) OVER (PARTITION BY customer_id ORDER BY customer_id ASC) AS "SNO"
from invoice;

但结果是失败。我错过了什么。还有什么意思是“记录应该根据customer_id升序显示,然后按SNO ”。

我得到的结果如下:
CUSTOMER_ID TOTAL SNO
1 70000 1
2 250000 1
2 560000 2
3 200000 1
3 45000 2

4 475000 1
5 50000 1
5 10000 2

6 600000 1
6 90000 2

预期结果是:
CUSTOMER_ID TOTAL SNO
1 70000 1
2 250000 1
2 560000 2
3 45000 1
3 200000 2

4 475000 1
5 10000 1
5 50000 2

6 600000 1
6 90000 2
TOTAL 列数据不匹配。

标签: sqloraclewindow-functions

解决方案


你很接近,你可能需要订购row_numberid假设它是根据时间升序的)

Select customer_id,
       total,
       ROW_NUMBER( ) OVER (PARTITION BY customer_id ORDER BY id ASC) AS "SNO"
from invoice
order by customer_id, "SNO" -- should be the default anyway (but there's no guarantee)

推荐阅读