2010-05-13 20 views
1

Salut, j'ai quelques SQL ...SQL - comptage sous

SELECT 
    AdviceNo, 
    Registration 
FROM tblSalesDetail 

qui produit quelque chose comme ...

ADV00001, ABC123 
ADV00001, CDE564 
ADV00002, FGE432 
ADV00003, HUY789 
ADV00003, MJS532 
ADV00003, JFY428 

Quelqu'un peut-il me dire comment je l'adapter à voir le suivant s'il vous plaît?

ADV00001, ABC123, 1 
ADV00001, CDE564, 2 
ADV00002, FGE432, 1 
ADV00003, HUY789, 1 
ADV00003, MJS532, 2 
ADV00003, JFY428, 3 
+0

Sont-ils le nombre d'enregistrements de détail des ventes avec l'avis/l'enregistrement donné? –

Répondre

1

En quoi consistent les fonctions analytiques Oracle?

Ceci est un exemple classique dans lequel RANK est utile ;-)

SELECT AdviceNo, 
     Registration, 
     RANK() OVER (PARTITION BY AdviceNo ORDER BY Registration ASC) MY_RANK 
    FROM tblSalesDetail; 
+0

Ma solution fonctionne uniquement sous Oracle PL/SQL. – UltraCommit

+1

Un certain nombre d'autres DB supportent la partition par. SQL Server le fait et je suis à peu près sûr que DB/2 le fait aussi. Il peut y avoir de légères variations de plate-forme. – ConcernedOfTunbridgeWells

+1

M. Chicken, votre solution fonctionne très bien dans MS SQL 2005 - merci –

2

Vous pouvez utiliser row_number() et partition by avec une clause over pour réinitialiser un compte en fonction des groupes; la syntaxe est quelque chose comme (note, non testé):

SELECT 
    AdviceNo, 
    Registration, 
    row_number() over 
    (partition by AdviceNo 
    order by Registration)  as Ordinal 
FROM tblSalesDetail 

partition by est un peu comme group by mais il ne roule pas les données - il remet à zéro tout ce que vous calculez dans la partition. Dans ce cas, nous calculons un numéro de ligne en utilisant une fonction intégrée, et en le triant par enregistrement dans les groupes. Discute en utilisant OVER sur T-SQL

This link to the MSDN docs C'est fondamentalement la même chose sur les autres plateformes qui le supportent. Que signifient les chiffres dans la dernière colonne?

+0

merci pour l'explication, c'est utile. –