2012-12-20 20 views
5

Ich habe eine SQL-Ergebnismenge, die diesen recht ähnlich sieht, und bestellt nach Stil:Select Top n Zeilen

STYLE  |  CUSTOMER  |  SIZE  |  COLOUR  | 
----------------------------------------------------------------- 
A    DWTG    S    BLUE 
B    DWTG    S    RED 
C    DWTG    S    GREEN 
C    DWTG    M    GREEN 
D    DWTG    S    ORANGE 
D    DWTG    M    ORANGE 
D    DWTG    L    ORANGE 

Nun, ich brauche dieses Ergebnis gesetzt spalten und die ersten 1000 Zeilen erhalten. Kein Problem, ich kann TOP 1000 verwenden.

Mein Problem ist, mit dem obigen Beispiel, wenn ich wollte, sagt die Top-3 Reihen, weil STYLE hat C in der nächsten Zeile wiederholt, ich brauche dies auch umfassen (so würde ich tatsächlich 4 Zeilen).

Beispiel oben würde ich das Ergebnis gesetzt aussehen soll:

STYLE  |  CUSTOMER  |  SIZE  |  COLOUR  | 
----------------------------------------------------------------- 
A    DWTG    S    BLUE 
B    DWTG    S    RED 
C    DWTG    S    GREEN 
C    DWTG    M    GREEN 

Dies hat gekommen, weil ein ERP wir Daten in hat eine Dateigröße Grenze importieren, also muss ich meine Ergebnismenge geteilt in kleinere Dateien, aber ich muss die gleichen Datensätze (der gleiche Wert in STYLE) zusammenhalten.

Ich dachte eine Fensterfunktion von irgendeiner Art, die dynamisch eine Zahl zu TOP n basierend darauf hinzufügt, ob die nächste Reihe den gleichen Stil hat.

Irgendwelche Ideen?

+0

Können zeigen Sie eine Probe von dem, was Sie die Ausgabe zu sein? – JohnFx

Antwort

10

Es klingt wie Sie dies wünschen:

select top 3 with ties * 
from yourtable 
order by style 

Siehe SQL Fiddle with Demo

Edit # 1: eine aktualisierte sql fiddle with your additional data

Ergebnis Siehe:

| STYLE | CUSTOMER | SIZE | COLOUR | 
------------------------------------ 
|  A |  DWTG | S | BLUE | 
|  B |  DWTG | S | RED | 
|  C |  DWTG | S | GREEN | 
|  C |  DWTG | M | GREEN | 
+0

Nur gelesen, aber es sieht so aus. Meine Ausgabe hat jedoch etwa 20 Spalten. Wie kann ich angeben, welche Spalte ich mit der Spalte "with ties" zusammenhalten soll? – Lock

+0

@Lock Es wird die Spalte (n) verwenden, nach der Sie die Zeilen gruppieren, in diesem Fall nur "Stil". –

+1

@Lock können Sie Ihrer Frage ein paar andere Spalten hinzufügen, so dass niemand ein bewegliches Ziel verfolgt? –