Na przykład mam tabelę z 2 kolumnami first_name
i last_name
tymi wartościami
Ali Khani
Elizabette Amini
Britney Spears
,...
Chcę napisać select
zapytanie, które wygeneruje następującą tabelę:
1 Ali Khani
2 Elizabette Amini
3 Britney Spears
,...
Dzięki za pomoc.
sql-server
auto-increment
wf Khani
źródło
źródło
Odpowiedzi:
Jeśli to MySql, możesz spróbować
SELECT @n := @n + 1 n, first_name, last_name FROM table1, (SELECT @n := 0) m ORDER BY first_name, last_name
SQLFiddle
I dla SQLServer
SELECT row_number() OVER (ORDER BY first_name, last_name) n, first_name, last_name FROM table1
SQLFiddle
źródło
table1
zamiast tego wybrać wszystkie kolumny zfirst_name
ilast_name
jak mogę się do nich odwołać? PróbowanieSELECT @n := @n + 1 n, *
nie działaSELECT @n := @n + 1 n, table1.*
SET @n = 0;
(SELECT @n := 0)
. Ukryte piękno tego podejścia polega na tym, że zamiast dwóch masz jedną instrukcję, co jest dobre, gdy wiele instrukcji jest zabronionych w kodzie klienta.tutaj jest
SQL server, Oracle, PostgreSQL
wsparcie dla funkcji okien.SELECT ROW_NUMBER() OVER (ORDER BY first_name, last_name) Sequence_no, first_name, last_name FROM tableName
źródło
W przypadku, gdy nie masz naturalnej wartości partycji i po prostu potrzebujesz uporządkowanej liczby niezależnie od partycji, możesz po prostu wykonać wiersz_numer na stałej, w poniższym przykładzie właśnie użyłem „X”. Mam nadzieję, że to komuś pomoże
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
źródło
DECLARE @id INT SET @id = 0 UPDATE cartemp SET @id = CarmasterID = @id + 1 GO
źródło