2013-05-15 24 views
50

比如我有2列,first_namelast_name這些值如何生成在選擇查詢自動增量場

Ali   Khani 
Elizabette Amini 
Britney  Spears 
,... 

我想寫一個select查詢產生一個像這樣的表的表:

1  Ali   Khani 
2  Elizabette Amini 
3  Britney  Spears 
,... 

感謝您的幫助。

+1

您使用的是什麼RDBMS? – peterm

回答

95

如果它是MySQL中,你可以嘗試

SELECT @n := @n + 1 n, 
     first_name, 
     last_name 
    FROM table1, (SELECT @n := 0) m 
ORDER BY first_name, last_name 

SQLFiddle

而對於SQLServer的

SELECT row_number() OVER (ORDER BY first_name, last_name) n, 
     first_name, 
     last_name 
    FROM table1 

SQLFiddle

+0

非常感謝你,這是工作。 –

+0

如果我想要從'table1'而不是'first_name'和'last_name'選擇所有列,我該如何參考所有列?嘗試'SELECT @n:= @n + 1 n,*'不起作用 – Wronski

+0

答案是'SELECT @n:= @n + 1 n,table1。*' – Wronski

17

這裏是支持窗口功能的SQL server, Oracle, PostgreSQL

SELECT ROW_NUMBER() OVER (ORDER BY first_name, last_name) Sequence_no, 
     first_name, 
     last_name 
FROM tableName 
+0

謝謝你,你的代碼工作得很好 –

+0

謝謝,這個答案幫了我Oracle數據庫。 –

+0

非常感謝John – Murali

-1
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp 
SET @id = CarmasterID = @id + 1 
GO 
-2

在這種情況下,你有沒有自然分區值,只是想要一個有序數無關的分區,你可以做一個ROW_NUMBER在一個恆定的,在下面的例子我剛剛使用'X'。 希望這可以幫助別人

select 
    ROW_NUMBER() OVER(PARTITION BY num ORDER BY col1) as aliascol1, 
    period_next_id, period_name_long 
from 
(
    select distinct col1, period_name_long, 'X' as num 
    from {TABLE} 
) as x 
相關問題