2016-04-13 3 views
-1

Ich habe eine Anforderung, Datensätze gleichmäßig in zwei Kategorien zu verteilen. Aber wenn ich in einer Kategorie keine Datensätze mehr habe, sollte ich die verbleibenden Datensätze in einer anderen Kategorie berücksichtigen.Verteilen Sie Datensätze in SQL basierend auf count

Beispieldaten:

enter image description here

Wenn wie diese Studenten von Subjekt s1 12 sind, und unterliegt s2 sind 20. Ich brauche 30 Studenten zu holen, Ergebnis mir 15 für jedes Thema geben soll, sondern als s1 insgesamt ist nur 12, ich sollte 12 von s1 und 18 von s2 bekommen.

+1

Frage ist unklar! Bitte geben Sie die Beispieldaten und das erwartete Ergebnis an. –

+0

bearbeiten erledigt, bitte überprüfen und rückgängig machen – HappieFeet

+0

Können Sie bitte die Frage upvote. Ich habe es bearbeitet und eine Probe zur Verfügung gestellt. – HappieFeet

Antwort

0

Dies sollte den Trick:

DECLARE @t TABLE(ID INT, Student VARCHAR(10), Subject CHAR(2)) 

INSERT INTO @t VALUES 
(1, 'Stud1', 's1'), 
(2, 'Stud2', 's1'), 
(3, 'Stud3', 's2'), 
(4, 'Stud4', 's2'), 
(5, 'Stud5', 's2'), 
(6, 'Stud6', 's2'), 
(7, 'Stud7', 's2'), 
(8, 'Stud8', 's2'), 
(9, 'Stud9', 's2') 


;WITH cte AS(SELECT *, ROW_NUMBER() OVER(PARTITION BY Subject ORDER BY ID) AS rn FROM @t) 
SELECT TOP 7 * 
FROM cte 
ORDER BY rn, Subject 

Die Idee ist, dass Sie die Zeilen in Themen wie nummerieren: wegen

1 Stud1 s1 1 
3 Stud3 s2 1 
2 Stud2 s1 2 
4 Stud4 s2 2 
5 Stud5 s2 3 
6 Stud6 s2 4 
7 Stud7 s2 5 
8 Stud8 s2 6 
9 Stud9 s2 7 

Also, bei der Auswahl top N Reihen, sie verteilen automatisch Ordnen nach dieser Spalte.

+0

Hallo Giorgi, Danke für die Lösung. Das funktioniert perfekt. Jetzt habe ich eine weitere Anforderung, diese Datensätze basierend auf einer anderen Spalte gleichmäßig abzurufen. Zum Beispiel habe ich eine Abteilung Spalte ... so unter jedem Thema wieder, ich sollte die Datensätze gleichmäßig von jeder Abteilung holen. Kannst du bitte helfen, die Abfrage weiter zu modifizieren. Danke für die Hilfe. – HappieFeet

+0

@HappieFeet, nein, ich kann nicht ... Sie können eine andere Frage stellen. –

+0

NP. Danke jedenfalls, das hilft sehr. – HappieFeet

Verwandte Themen