Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于select语句中的特定记录集生成Oracle序列/编号_Sql_Oracle_Plsql_Sequences - Fatal编程技术网

Sql 基于select语句中的特定记录集生成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

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

多谢各位

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后重复相同的序列。我在我的主要问题中进行了更改,仅供参考,以便您清楚地理解。