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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top