这似乎应该是一个已经解决的经典发票项目问题,但也许我在搜索中没有使用正确的词。
我正在运行这样的查询(这只是一个简单的例子,我的实际查询要复杂得多,但它返回相同的结果):
select invoice.inv_num, item.name, item.qty
from invoice invoice, item
where invoice.inv_num = item.inv_num
order by invoice.inv_num
Run Code Online (Sandbox Code Playgroud)
我需要生成一个项目编号列,该列为每个项目递增,但每个新发票编号从 1 开始。因此,例如,我需要最终结果如下所示:
inv_num item_num name qty
------- -------- ------------- ---
111 1 red widgets 10
111 2 blue widgets 5
222 1 green_widgets 7
222 2 red_widgets 16
222 3 black_widgets 10
333 1 blue_widgets 8
333 2 red_widgets 12
Run Code Online (Sandbox Code Playgroud)
我们仍在使用 Oracle 9i 以防万一。
您可以使用 oracle rank 或 row_number 分析函数(取决于您希望如何处理重复项/同等排名项)。
以下是将第 4 列 item_number 添加到查询的方法:
select invoice.inv_num, item.name, item.qty ,
row_number() over (partition by inv_num order by qty desc) item_num
from invoice invoice, item
where invoice.inv_num = item.inv_num
order by invoice.inv_num
Run Code Online (Sandbox Code Playgroud)
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm#i81407
| 归档时间: |
|
| 查看次数: |
1551 次 |
| 最近记录: |