web-dev-qa-db-fra.com

Comment générer un champ d'incrémentation automatique dans une requête sélectionnée

Par exemple, j'ai une table avec 2 colonnes, first_name et last_name avec ces valeurs

ALi           Khani
Elizabette    Amini
Britney       Spears
,...

Je veux écrire une requête select qui génère une table comme celle-ci:

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

Merci de votre aide.

61
wf Khani

Si c'est MySql vous pouvez essayer

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

SQLFiddle

Et pour SQLServer

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

SQLFiddle

113
peterm

voici pour SQL server, Oracle, PostgreSQL quelles fonctions de la fenêtre de support.

SELECT  ROW_NUMBER() OVER (ORDER BY first_name, last_name)  Sequence_no,
        first_name,
        last_name
FROM    tableName
26
John Woo

Dans le cas où vous n'avez pas de valeur de partition naturelle et que vous voulez juste un nombre ordonné quelle que soit la partition, vous pouvez simplement faire un numéro de ligne sur une constante, dans l'exemple suivant, je viens d'utiliser '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
3
balgar jagpal
DECLARE @id INT 
SET @id = 0 
UPDATE cartemp
SET @id = CarmasterID = @id + 1 
GO
0
Dev3