2012-08-29 60 views
0
SOURCE_TABLE 
------------ 
OID EVENT_ID 
1 1111 
2 2222 
3 1111 
4 1111 
5 1111 
6 2222 
7 2222 
8 2222 

的Oracle SQL特定組coulmn基於一些其他coulmn

FINAL_TABLE 
------------ 
SNO EVENT_ID OID LINE_NUMBER 
1 1111  1 1 
2 1111  1 2 
3 1111  3 3 
4 1111  3 4 
5 1111  4 5 
6 1111  4 6 
7 1111  5 7 
8 1111  5 8 
9 2222  2 1 
10 2222  2 2 
11 2222  6 3 
12 2222  6 4 
13 2222  7 5 
14 2222  7 6 
15 2222  8 7 
16 2222  8 8 

我使用Oracle 11g。我想從SOURCE表插入數據到FINAL表。在FINAL表中,行號對於每個EVENT_ID都必須是唯一的(例如1111)。

回答

3

假設SNO是Final_Table中的自動增量PK。使用ROW_NUMBER() function

insert into FINAL_TABLE (EVENT_ID, OID, LINE_NUMBER) 
    (
    select EVENT_ID,OID, 
     ROW_NUMBER() OVER(PARTITION BY EVENT_ID ORDER BY OID) as LINE_NUMBER 
    from source_table 
); 
+0

謝謝@Valex後。如果我只從一個表中選擇,它工作正常。但實際上我試圖從4個表格中獲取數據。另一個表格也有EVENT_ID和OID只出現在source_table中。如果我重寫下面的查詢它不起作用。 '從source_table s' 選擇s.EVENT_ID,s.OID, ROW_NUMBER()OVER(PARTITION BY 「s.EVENT_ID」 ORDER BY 「s.OID」)作爲LINE_NUMBER 請幫助我。 –

+0

只是消除'「''從ROW_NUMBER()OVER(PARTITION BY s.EVENT_ID ORDER BY s.OID)符號' – valex

+0

謝謝你這麼多@valex ..它的工作.. :-) –

0

如果我理解正確的話此

SELECT EVENT_ID, OID ROW_NUMBER() 
    OVER (PARTITION BY EVENT_ID,OID ORDER BY OID) AS LINE_NUMBER 
    FROM SOURCE_TABLE; 
+0

感謝@ClearLogic,這是工作很好,如果我只從一個表中選擇,但實際上我想從4個表獲取數據。另一臺也有EVENT_ID和只存在於source_table OID。如果我重寫查詢如下它無法正常工作。'選擇秒。 EVENT_ID,s.OID,ROW_NUMBER()OVER(PARTITION BY 「s.EVENT_ID」 ORDER BY 「s.OID」)作爲LINE_NUMBER從source_table s'請幫助我。 –