2017-07-10 3 views
2

Ich denke über eine SQL-Abfrage, wo ich over (partition by xx) verwenden werde.ID für Ergebnisse von 'Partition von'?

Ich frage mich, wie könnte ich eine Spalte mit einer ID für jede Partition, die ich bekomme. Zum Beispiel finden Sie in der folgenden Tabelle:

Name   Country 
--------------------------- 
Mark   USA 
Paul   USA 
Jennifer  Canada 
Carla   Canada 
José   Mexico 
Pablo   Peru 

Nach dieser Abfrage (mit einer hypothetischen ID_PARTITION() Funktion):

select ID_PARTITION(), row_number() over (partition by country), name, country from tableabove; 

Ich würde erhalten:

ID Row_number() Name  Country 
_______________________________________ 
1    1 Mark  USA 
1    2 Paul  USA 
2    1 Jennifer Canada 
2    2 Carla Canada 
3    1 José  Mexico 
4    1 Pablo Peru 

Irgendwelche Hinweise auf Wie implementiert man so etwas?

Cheers,

Francis

+0

Welche Version von SQL Server sind Sie? Sie könnten sich die LAG/LEAD-Funktionen ansehen. –

+0

Danke, Reich! Ich werde das überprüfen. Ich weiß nicht genau die Version des Servers, aber ich werde überprüfen. – francisaugusto

+1

Warum 'USA'' ID' als '1' bekommen Wie bestellen Sie? –

Antwort

1

wie etwa:

SELECT DENSE_RANK() OVER (ORDER BY Country) AS ID 
     ,ROW_NUMBER() OVER (PARTITION BY Country ORDER BY Country) AS RowNumber 
     ,name 
     ,country 
    FROM tableabove 
2

Sie können wie unten verwenden DENSE_RANK:

Select Id_Partition = dense_rank() over(order by country), 
     RowNum = row_number() over(partition by country order by name), 
     [name], country 
from yourtable 
+1

Falsch ... Nicht sicher, warum es upvoted –

+1

Immer noch falsch..Order wird anders sein –

+0

Ja, Bestellung wird auf einigen anderen Spalten basieren, aber OP muss das zur Verfügung stellen –

Verwandte Themen