2009-09-04 50 views
12

我想知道如何爲使用順序的sql語句打印行號。 目前我試過ROWNUM,但據我瞭解,它只適用於未排序的結果集。Oracle:使用'order by'子句顯示行號

SELECT rownum, a.lg_id, a.full_name, a.sort_order 
    FROM activity_type_lang a 
    where a.lg_id = 'en' 
    order by a.full_name; 

TIA

回答

28

除了嵌套查詢,你可以使用的解析函數

SELECT row_number() OVER (ORDER BY a.full_name), 
     lg_id, 
     full_name, 
     sort_order 
    FROM activity_type_lang a 
WHERE a.lg_id = 'en' 
ORDER BY a.full_name 

使用分析功能也使得如果你想改變的關係如何處理更容易。您可以用RANK或DENSE_RANK替換ROW_NUMBER

7

哦。似乎我已經找到了一個解決方案。

Select rownum, lg_id, full_name, sort_order from 
(SELECT a.lg_id, a.full_name, a.sort_order 
     FROM activity_type_lang a 
     where a.lg_id = 'en' 
     order by a.full_name); 
3

ROWNUM在訂貨前應用,所以你必須重寫查詢是這樣的: 選擇ROWNUM,XXX * FROM(SELECT a.lg_id,a.full_name,a.sort_order FROM activity_type_lang一個 其中a.lg_id ='en' order by a.full_name )xxx;

2

你好。我不知道我怎麼能打印 行號爲sql語句,其中是 使用順序。目前我嘗試ROWNUM ,但據我瞭解,它只適用於 未排序的結果集。

要清楚(有人可能會弄錯它)。它確實工作(但不是你期望的方式)。問題在於,它會在排序之前「附加」ROWNUM ,並且您將獲取記錄,但不會記錄在連續的ROWNUM記錄中。爲什麼?由於

符合其中 標準select語句是 給出的rownum = 1

這真是很好的例子選擇/順序機制是如何工作的第一條記錄。