Új sor számot eredményhalmaz egy SQL lekérdezés

szavazat
26

Van egy egyszerű SELECT utasítást. Szeretnék adni egy ideiglenes oszlopot, amely megszámlálja a sorok az én eredményt készlet. Próbáltam ezt -

declare @num int
set @num = 0;
select t.A, t.B, t.C, (@count + 1) as number
from tableZ as t

Ez hozzárendeli az 1 az összes sorba. Próbáltam @count = @count + 1 és ez nem működött. Hogyan ezt a dolgot egy egyszerű módon?

Kösz.

A kérdést 27/11/2013 00:09
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
35

A tipikus minta a következő lenne, de meg kell, hogy ténylegesen meghatározzák a rendelési kell alkalmazni (mivel a tábla definíció szerint egy rendezetlen zsák sor):

SELECT t.A, t.B, t.C, number = ROW_NUMBER() OVER (ORDER BY t.A)
  FROM dbo.tableZ AS t
  ORDER BY t.A;

Nem tudom, mi a változókat a kérdéses hivatott képviselni (nem egyeznek).

Válaszolt 27/11/2013 00:12
a forrás felhasználó

szavazat
40
SELECT
    t.A,
    t.B,
    t.C,
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS number
FROM tableZ AS t

Lásd működő példa a SQLFiddle

Persze, érdemes meghatározni a sor-számozási sorrendben - ha igen, csak csere OVER (ORDER BY (SELECT 1))az, például OVER (ORDER BY t.C), mint egy normális ORDER BYzáradékot.

Válaszolt 27/11/2013 00:16
a forrás felhasználó

szavazat
0

Tehát mielőtt MySQL 8.0 nincs ROW_NUMBER () függvényt. Accpted válasz átírt támogató régebbi verziói MySQL:

SET @row_number = 0;
SELECT t.A, t.B, t.C, (@row_number:=@row_number + 1) AS number
FROM dbo.tableZ AS t ORDER BY t.A;
Válaszolt 30/12/2019 05:53
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more