2016-02-25 63 views
-1

我正在使用oracle,每次運行query時都需要增量行編號。我知道,通常的解決方案是使用rownum但:sql增量行編號

query 1

1 1st row 
2 2nd row 
3 3rd row 

我現在被一些價值和輸出中排序query應該

1 3rd row 
2 1st row 
3 2nd row 

我怎樣才能achive那種behaveour的?編輯: 我認爲我的問題並不清楚。我不需要使用rownum的解決方案,我需要的是在我的query的每一行簡單的number它應該總是在sequential order(1,2,3,4,5)。

所以:

我跑query和我的初步結果

Line nr  Some value 
1   line 1 
2   line 2 
3   line 3 
4   line 4 

現在,我將運行相同query不同order by

Line nr  Some value 
1   line 4 
2   line 3 
3   line 2 
4   line 1 

注:我感興趣的列Line nr

+4

'ROW_NUMBER()OVER' – dnoeth

+0

@Tagyoureit - 你想要一個將改變每次後續運行的行順序的查詢? – Utsav

+0

請再看看我的任務,我添加了額外的解釋。 – Tagyoureit

回答

4
SELECT ROW_NUMBER() OVER (ORDER BY some_value) id, 
     value 
FROM your_table 
ORDER BY some_value 

或:

SELECT ROWNUM AS id, 
     value 
FROM (
    SELECT value 
    FROM your_table 
    ORDER BY some_value 
) 

CREATE TABLE your_table (value, some_value, some_other_value) AS 
SELECT 'Line 1', 4, 2 FROM DUAL UNION ALL 
SELECT 'Line 2', 3, 4 FROM DUAL UNION ALL 
SELECT 'Line 3', 2, 1 FROM DUAL UNION ALL 
SELECT 'Line 4', 1, 3 FROM DUAL; 

查詢1

SELECT ROW_NUMBER() OVER (ORDER BY some_value) id, 
     value 
FROM your_table 
ORDER BY some_value 

輸出1

 ID VALUE 
---------- ------ 
     1 Line 4 
     2 Line 3 
     3 Line 2 
     4 Line 1 

查詢2

SELECT ROWNUM AS id, 
     value 
FROM (
    SELECT value 
    FROM your_table 
    ORDER BY some_other_value 
) 

輸出2

 ID VALUE 
---------- ------ 
     1 Line 3 
     2 Line 1 
     3 Line 4 
     4 Line 2 

查詢3 - 使用DESC訂貨:

(記住更新訂貨都地方)

SELECT ROW_NUMBER() OVER (ORDER BY some_other_value DESC) id, 
     value 
FROM your_table 
ORDER BY some_other_value DESC; 

輸出3:(某些價值秩序)

 ID VALUE 
---------- ------ 
     1 Line 2 
     2 Line 4 
     3 Line 1 
     4 Line 3 
+0

謝謝你的回答,但它不是我要找的。請再看看我原來的問題,我已經詳細解釋了一下。 – Tagyoureit

+1

請看我添加到我的答案中的示例 - 它完全符合您的要求(即'id'等同於您的'line_nr')。 – MT0

+0

從你的例子(凱里1),如果我運行它,因爲你說我會得到正確的編號。但是,如果我採取你的解決方案,通過desc id(line_nr)更改順序將按降序排列。我希望它始終保持ASC順序。行號應按照ASC順序。 – Tagyoureit