Например, у меня есть таблица с 2 столбцами, first_name
и last_name
с этими значениями
Ali Khani
Elizabette Amini
Britney Spears
,...
Я хочу написать select
запрос, который генерирует такую таблицу:
1 Ali Khani
2 Elizabette Amini
3 Britney Spears
,...
Спасибо за вашу помощь.
sql-server
auto-increment
wf Khani
источник
источник
Ответы:
Если это 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
источник
table1
вместо этого все столбцыfirst_name
иlast_name
как я могу ссылаться на все? ПопыткаSELECT @n := @n + 1 n, *
не работаетSELECT @n := @n + 1 n, table1.*
SET @n = 0;
(SELECT @n := 0)
. Скрытая прелесть этого подхода в том, что у вас есть один оператор вместо двух, что хорошо, когда несколько операторов запрещены в вашем клиентском коде.вот для
SQL server, Oracle, PostgreSQL
каких оконных функций поддержки.SELECT ROW_NUMBER() OVER (ORDER BY first_name, last_name) Sequence_no, first_name, last_name FROM tableName
источник
В случае, если у вас нет естественного значения раздела и вы просто хотите упорядоченное число независимо от раздела, вы можете просто указать 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
источник
DECLARE @id INT SET @id = 0 UPDATE cartemp SET @id = CarmasterID = @id + 1 GO
источник