我使用oracle查询获取一个特定的结果集。在那里我有一个表示下一组记录的键。我需要使用密钥并为这些记录生成序列。 对于例如oracle结果集看起来没有序列。
PROD_ID SEQUENCE TYPE QUANTITY
1-9ER 200 Capsule 50
1-9ER 210 Tablet 80
1-9ER 220 Tonic 75
1-9ER 230 Injection 90
1-7OR 200 Capsule 80
1-7OR 210 Tablet 30
1-7OR 220 Tonic 15
1-7OR 230 Injection 20
因此,我需要通过SQL select查询嵌入sequnce,一旦找到不同的产品ID,它应该增加到下一组100。那么,是否可以在oracle中为此编写查询? 我只是在我的查询中使用一般序列,但这并不能解决我的问题。请告诉我如何解决这个问题。
谢谢。
答案 0 :(得分:1)
select prod_id,
100 * dense_rank() over (order by prod_id) + row_number() over (partition by prod_id order by type) - 1 as seq_number,
type,
quantity
from products
order by prod_id, type;
SQLFiddle示例:http://sqlfiddle.com/#!4/d97c6/2
问题发生变化后编辑:
您可以通过更改窗口函数的使用来更改数字的生成方式:
select prod_id,
200 + row_number() over (partition by prod_id order by type) * 10 as seq_number,
type,
quantity
from products
order by prod_id, type;
SQLFiddle:http://sqlfiddle.com/#!4/d97c6/3