web-dev-qa-db-fra.com

SQL pour afficher le numéro de ligne dans les résultats d'une requête

Je souhaite générer un numéro de ligne pour chaque ligne dans les résultats d'une requête SQL. Comment est-il possible de faire ça?

Exemple: dans la requête 

select distinct client_name from deliveries

J'aimerais ajouter une colonne indiquant le numéro de ligne

Je travaille sur le serveur SQL 2005.

21
madewulf

Cela dépend de la base de données que vous utilisez. Une option qui fonctionne pour SQL Server, Oracle et MySQL:

SELECT ROW_NUMBER() OVER (ORDER BY SomeField) AS Row, *
FROM SomeTable

Modifier SomeField et SomeTable est en fonction de votre table spécifique et du champ pertinent à commander. Il est préférable que SomeField soit naturellement unique dans le contexte de la requête.

Dans votre cas, la requête serait la suivante (Faiz l'a conçue en premier):

SELECT ROW_NUMBER() OVER (ORDER BY client_name) AS row_number, client_name
FROM (SELECT DISTINCT client_name FROM deliveries) TempTable

Je pense que cela ne fonctionnera pas pour SQLite (si quelqu'un peut me corriger ici, je vous en serais reconnaissant), je ne sais pas quelle est l'alternative.

34
Roee Adler

Vous pouvez utiliser la fonction ROW_NUMBER pour cela. Vérifiez la syntaxe pour ceci ici http://msdn.Microsoft.com/en-us/library/ms186734.aspx

SELECT FirstName, LastName, ROW_NUMBER() OVER(ORDER BY FirstName) AS 'Row#'    
FROM Sales.vSalesPerson;

Pour votre requête,

SELECT client_name, ROW_NUMBER() Over (Order By client_name) AS row_number 
FROM   (select distinct client_name from deliveries) SQ

marchera.

4
Faiz

Dans Oracle

SQL> select row_number() over (order by deptno) as rn
  2         , deptno
  3  from
  4     ( select distinct deptno
  5            from emp
  6          )
  7  /

        RN     DEPTNO
---------- ----------
         1         10
         2         20
         3         30

SQL>
1
APC

En SQL, nous utilisons également cette requête:

select row_number() over (order by table_kid) as S_No ,table_columnname,table_columnname2 from tablename where table_fieldcondition='condtionnal falg or data ';

Ici table_kid ou peut être une autre table_columnname

0
user7912960