Domanda
Ciao ho delle SQL ...
SELECT
AdviceNo,
Registration
FROM tblSalesDetail
che produce qualcosa di simile ...
ADV00001, ABC123
ADV00001, CDE564
ADV00002, FGE432
ADV00003, HUY789
ADV00003, MJS532
ADV00003, JFY428
Qualcuno può dirmi come mi piacerebbe regolarlo vedere il seguente favore?
ADV00001, ABC123, 1
ADV00001, CDE564, 2
ADV00002, FGE432, 1
ADV00003, HUY789, 1
ADV00003, MJS532, 2
ADV00003, JFY428, 3
Soluzione
Come è circa le funzioni di Oracle di analisi?
Questo è un esempio classico in cui Grado è utile; -)
SELECT AdviceNo,
Registration,
RANK () OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK
FROM tblSalesDetail;
Altri suggerimenti
È possibile utilizzare row_number()
e partition by
con una clausola over
per azzerare un conteggio sulla base di gruppi; la sintassi è qualcosa di simile (si noti, non testato):
SELECT
AdviceNo,
Registration,
row_number() over
(partition by AdviceNo
order by Registration) as Ordinal
FROM tblSalesDetail
partition by
è un po 'come group by
ma non rotola il backup dei dati - semplicemente azzera qualunque cosa si sta calcolando all'interno della partizione. In questo caso stiamo calcolando un numero di riga
utilizzando una costruito in funzione, e smistamento dalla registrazione all'interno dei gruppi.
Questo link alla documentazione MSDN discute utilizzando oltre a T -SQL. E 'fondamentalmente la stessa su altre piattaforme che lo supportano.