2012-07-27 6 views
6

C'è un modo per specificare più colonne nella clausola OVER ORDER BY?Più colonne in OVER ORDER BY

SELECT ROW_NUMBER() OVER(ORDER BY (A.Col1)) AS ID FROM MyTable A 

Quanto sopra funziona bene, ma il tentativo di aggiungere una seconda colonna non funziona.

SELECT ROW_NUMBER() OVER(ORDER BY (A.Col1, A.Col2)) AS ID FROM MyTable A 

sintassi corretta accanto a ''.

risposta

12

Il problema sono le parentesi extra attorno al nome della colonna. Questi dovrebbero lavorare tutti:

-- The standard way 
SELECT ROW_NUMBER() OVER(ORDER BY A.Col1) AS ID FROM MyTable A 
SELECT ROW_NUMBER() OVER(ORDER BY A.Col1, A.Col2) AS ID FROM MyTable A 

-- Works, but unnecessary 
SELECT ROW_NUMBER() OVER(ORDER BY (A.Col1), (A.Col2)) AS ID FROM MyTable A 

Inoltre, quando si chiede una domanda di SQL, si dovrebbe sempre specificare quale database che si sta eseguendo la query contro.

0

Nessuna parentesi.

SELECT ROW_NUMBER() OVER(ORDER BY A.Col1, A.Col2) AS ID FROM MyTable A 
-5

questo non possibile è possibile vedere la sintassi di Row_Num:

ROW_NUMBER () 
    OVER ([ PARTITION BY value_expression , ... [ n ] ] order_by_clause) 

se l'uso ordine extra archiviato in gruppo per lo si può fare ..