2012-02-05 10 views
18

Jak mogę dodać numery ROW do tego wyniku zapytania?Dodaj numer wiersza do tego zapytania T-SQL

SELECT DISTINCT 
    VehicleSpecs.SubmittedById, 
    COUNT(VehicleSpecs.SubmittedById) AS NumCars, 
    aspnet_Users.UserName 
FROM 
    VehicleSpecs 
    INNER JOIN aspnet_Users ON VehicleSpecs.SubmittedById = aspnet_Users.UserId 
WHERE 
    (LEN(VehicleSpecs.SubmittedById) > 0) 
GROUP BY 
    VehicleSpecs.SubmittedById, 
    aspnet_Users.UserName 
ORDER BY 
    NumCars DESC 

Odpowiedz

19

Dodaj: ROW_NUMBER() OVER (ORDER BY NumCars)

EDIT:

WITH t1 AS 
(SELECT DISTINCT 
      VehicleSpecs.SubmittedById , 
      COUNT(VehicleSpecs.SubmittedById) AS NumCars , 
      aspnet_Users.UserName 
    FROM  VehicleSpecs 
      INNER JOIN aspnet_Users ON VehicleSpecs.SubmittedById = aspnet_Users.UserId 
    WHERE (LEN(VehicleSpecs.SubmittedById) > 0) 
    GROUP BY VehicleSpecs.SubmittedById , 
      aspnet_Users.UserName 
) 
SELECT ROW_NUMBER() OVER (ORDER BY NumCars), * 
FROM t1 
ORDER BY NumCars 
+0

Tomek Nie rozumiem, gdzie w zapytaniu muszę to podać? –

+0

@MarioM: Zobacz moją edycję. – Tomek

+0

Próbowałem Twojego zapytania, ale pojawia się ten błąd: Msg 208, Level 16, State 1, Line 1 Nieprawidłowa nazwa obiektu "VehicleSpecs". Próbowałem także z [CarSpecs.] [Dbo]. [VehicleSpecs] ... ale dostaję ten sam błąd ... –

18

Wrap ty cała kwerenda w kwerendzie sub i dodać row_number w zapytaniu zewnętrznym.

select *, row_number() over(order by (select 0)) as rn 
from 
    (
    select distinct -- your columns 
    from YourTable 
) as T 
order by NumCars desc 
+0

Czy MS SQL nie zezwala na pustą klauzulę 'over()'? –

+0

+1 Nie zauważyłem, że istnieje "DISTINCT". –

+0

@a_horse_with_no_name - Nie dla number wiersza. Robi to dla max i min. –