2013-05-15 34 views

Trả lời

95

Nếu đó là MySql bạn có thể thử

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

SQLFiddle

Và đối với SQLServer

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

SQLFiddle

+0

cảm ơn bạn rất nhiều, đã được làm việc. –

+0

Nếu tôi muốn seleect tất cả các cột từ 'table1' thay vì' first_name' và 'last_name', làm thế nào tôi có thể tham khảo tất cả? Đang thử 'SELECT @n: = @n + 1 n, *' không hoạt động – Wronski

+0

Câu trả lời là 'SELECT @n: = @n + 1 n, table1. *' – Wronski

17

đây là dành cho SQL server, Oracle, PostgreSQL hỗ trợ chức năng cửa sổ.

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

cảm ơn bạn, mã của bạn đã hoạt động rất tốt –

+0

Cảm ơn bạn, câu trả lời này đã giúp tôi cho Oracle DB. –

+0

Cảm ơn rất nhiều John – Murali

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

Trong trường hợp bạn không có giá trị phân vùng tự nhiên và chỉ muốn một số lệnh không phân biệt phân vùng bạn chỉ có thể làm một row_number qua một hằng số, trong ví dụ sau tôi đã sử dụng 'X'. Hy vọng điều này sẽ giúp ai đó

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 
Các vấn đề liên quan