Sql 基于select语句中的特定记录集生成Oracle序列/编号
我正在使用oracle查询获取一个特定的结果集。因为我有一个键,它表示下一组记录。我需要使用密钥并为这些记录生成序列。 例如,oracle结果集在没有序列的情况下如下所示Sql 基于select语句中的特定记录集生成Oracle序列/编号,sql,oracle,plsql,sequences,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 Inj
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中为此编写查询?
我只是在查询中使用一个常规序列,但这并不能解决我的问题。请为我提供如何解决这个问题的想法
多谢各位
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示例:
更改问题后编辑:
您可以通过更改窗口功能的使用来更改生成数字的方式:
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:在Oracle中可以吗?对怎么用?分析函数。你能提供一个预期输出的例子吗?嗨,我们能调整查询以获取序列,使序列看起来更像一个重复序列吗。例如,产品ID序列类型数量1-9ER 200胶囊50 1-9ER 201片剂80 1-9ER 202补品75 1-9ER 203注射液90 1-7或200胶囊80 1-7或201片剂30 1-7或202补品15 1-7或203注射液20你。@Cool\u甲骨文:对不起,我不明白。这个例子输出的正是您在问题中所写的内容。非常感谢您的回答。但是,我想将序列增加10,并在遇到不同的PROD_ID后重复相同的序列。我在我的主要问题中进行了更改,仅供参考,以便您清楚地理解。