2016-04-13 16 views
-1

レコードを2つのカテゴリに均等に分配する必要があります。しかし、いずれかのカテゴリのレコードが不足している場合は、残りのレコードを他のカテゴリのレコードに含める必要があります。件数に基づいてSQLでレコードを配信する

サンプルデータ:

enter image description here

対象s1のこの学生は12であり、対象s2は、私が30人を選ぶ必要がある20をしているように、結果は私に各被験者のための15を与える必要がある場合は、しかしとしてs1の合計はわずか12で、私はs1から12を、s2から18を得なければなりません。

+1

質問が不明です!サンプルデータと期待される結果を提供してください。 –

+0

編集が完了しました。確認して元に戻してください – HappieFeet

+0

あなたは質問をアップアップできますか?私はそれを編集してサンプルを提供しました。 – HappieFeet

答えて

0

これはトリックを行う必要があります。

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 

アイデアは、あなたのような被験者内の行番号付けされていることである。top N行を選択する際

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 

だから、彼らが原因で自動的に配布されていますその列による注文。

+0

こんにちはジョルジ、ソリューションをありがとう。これは完璧に動作します。今私は別の列に基づいてこれらのレコードを均等にフェッチする必要があります。たとえば、私は部門の列を持っているので、再び各科目の下で、各部門から等しくレコードを取り出す必要があります。クエリをさらに変更する際にお役立てください。助けてくれてありがとう。 – HappieFeet

+0

@HappieFeet、いいえ、私はできません...あなたは別の質問をすることができます。 –

+0

NP。とにかくおかげで、これは多くの助けになります。 – HappieFeet

関連する問題