2013-05-15 10 views

Odpowiedz

95

Jeśli jest MySql można spróbować

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

SQLFiddle

a dla SQLServer

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

SQLFiddle

+0

dziękuję bardzo, to się udało. –

+0

Co jeśli chcę wybrać wszystkie kolumny z 'table1' zamiast' first_name' i 'last_name', jak mogę się odwołać do wszystkich? Wypróbowanie 'SELECT @n: = @n + 1 n, *' nie działa – Wronski

+0

Odpowiedź brzmi "SELECT @n: = @n + 1 n, table1. *' – Wronski

17

jest tutaj dla SQL server, Oracle, PostgreSQL, które obsługują funkcje okna.

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

dziękuję, twój kod działał bardzo dobrze –

+0

Dziękuję, ta odpowiedź pomogła mi w Oracle DB. –

+0

Wielkie dzięki John – Murali

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

W przypadku nie masz naturalną wartość partycji i po prostu chcą uporządkowaną liczbę niezależnie od partycji można po prostu zrobić row_number na stałe, w następujący przykład właśnie użyłem "X". Mam nadzieję, że pomogę komuś

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 
Powiązane problemy