2014-10-27 73 views
0

我使用oracle查詢獲取一個特定的結果集。因爲我有一個表示下一組記錄的關鍵字。我需要使用密鑰併爲這些記錄生成序列。 例如oracle結果集看起來像這樣,沒有序列。基於select語句中特定記錄集的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

Oracle可以嗎?是。怎麼樣?分析功能。 – 2014-10-27 16:54:59

+0

你能提供一個預期輸出的例子嗎? – 2014-10-27 17:10:49

回答

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

+0

嗨, 我們可以調整查詢來獲取序列,使序列看起來更像一個重複的序列。 例如 PROD_ID序列類型QUANTITY 1-9ER 200膠囊50 1-9ER 201平板80 1-9ER 202補藥75 1-9ER 203注射90 1-7OR 200膠囊80 1-7OR 201平板30 1- 7OR 202 Tonic 15 1-7OR 203注射20 謝謝。 – 2014-10-27 19:46:59

+0

@Cool_Oracle:對不起,我不明白。該示例輸出*完全*您在問題中寫的內容。 – 2014-10-27 20:19:46

+0

非常感謝你的回答。 但是,我想將序列增加10,並在遇到不同的PROD_ID後重復相同的序列。我在主要問題上做了修改以供參考,以便清楚地理解。 – 2014-10-27 20:28:02