基于select语句中特定记录集的Oracle序列/数字生成

时间:2014-10-27 16:30:39

标签: sql oracle plsql sequences

我使用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中为此编写查询? 我只是在我的查询中使用一般序列,但这并不能解决我的问题。请告诉我如何解决这个问题。

谢谢。

1 个答案:

答案 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