30 Stimmen

SQL zur Ausgabe der Zeilennummer in den Ergebnissen einer Abfrage

Ich möchte eine Zeilennummer für jede Zeile in den Ergebnissen einer Sql-Abfrage generieren. Wie ist das möglich?

Beispiel: In der Anfrage

select distinct client_name from deliveries

Ich würde gerne eine Spalte mit der Zeilennummer hinzufügen

Ich arbeite mit Sql Server 2005.

0 Stimmen

Welche SQL-Engine verwenden Sie?

0 Stimmen

Welche Datenbankplattform verwenden Sie? MySQL? SQL-Server? Oracle? In welcher Programmiersprache/Umgebung führen Sie die Abfrage aus? Gibt es einen bestimmten Grund, warum Sie es für besser halten, dies über eine Abfrage und nicht über Programmcode zu tun?

0 Stimmen

Ich verwende Microsoft Reporting Services als Umgebung, und ich brauche einen Integer-Bezeichner für meine Zeilen wegen eines Fehlers in diesem Tool.

43voto

Roee Adler Punkte 32367

Das hängt von der Datenbank ab, die Sie verwenden. Eine Option, die für SQL Server, Oracle und MySQL funktioniert:

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

Ändern Sie SomeField und SomeTable entsprechend Ihrer spezifischen Tabelle und dem entsprechenden Feld, nach dem geordnet werden soll. Es wird bevorzugt, dass SomeField im Zusammenhang mit der Abfrage eindeutig ist, natürlich.

In Ihrem Fall würde die Abfrage wie folgt lauten (Faiz hat eine solche Abfrage zuerst erstellt):

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

Ich denke, es wird nicht für SQLite funktionieren (wenn jemand mich hier korrigieren kann, wäre ich dankbar), ich bin nicht sicher, was die Alternative dort ist.

4 Stimmen

Für Sql Server 2005 wäre dies die bevorzugte Option

1 Stimmen

@Russ: Sie meinen die einzige vernünftige Option.

1 Stimmen

@Eric: Willst du damit sagen, dass die Vernunft immer vorzuziehen ist? :)

4voto

Faiz Punkte 5161

Hierfür können Sie die Funktion ROW_NUMBER verwenden. Prüfen Sie die Syntax dafür hier http://msdn.microsoft.com/en-us/library/ms186734.aspx

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

Für Ihre Anfrage,

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

wird funktionieren.

1voto

APC Punkte 140727

In 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>

0voto

giogio ben Punkte 41

ODER Sie könnten auch Folgendes tun

SELECT DISTINCT client_name, @num := @num + 1 AS lineNum(this is your new col)
FROM deliveries
JOIN (SELECT @num :=0) AS n ON 1=1;

Ich hoffe, das hilft auch :)

0voto

user7912960 Punkte 21

In SQL verwenden wir auch diese Abfrage:

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

Hier table_kid oder eventuell andere table_columnname

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X