0

MSSQL データベースにこれら 2 つのテーブルがあります。

生徒の好みのテーブル (このテーブルには、データベースで 1 ~ 7 の番号が付けられた好みの列があります)

 ------------------------------------------------------------------------------
    Student Name |   Preference 1|  Preference 2 | Preference 3  |Group ID
    -----------------------------------------------------------------------
    Student A    |   Student G   |   Student F   |  Student G    |
    Student B    |   Student H   |   Student K   |  Student L    |
    Student C    |   Student I   |   Student A
    Student D    |   Student H   |   Student K
    Student E
    Student F
    Student G
    Student H
    Student I
    Student J
    Student K
    Student L
    -----------------------------------------------------------------------------

グループ表

 |Group ID |
     ---------
    1
    2
    3
    ----------

学生が入力した好み (優先パートナー/チームメイト) に基づいて、学生のグループを作成しています。各グループには 5 ~ 8 人の生徒を含めることができます。すべての生徒が希望を入力できるわけではありません。グループを作成するには、4 ~ 7 の設定を入力した生徒を確認し、グループに追加します。たとえば、生徒 A が 4 つの設定を入力したとします。学生Aを含めて、グループに必要な最小数の学生が5人になりました。それで、「グループテーブル」に挿入してその番号を取得し、各学生の「グループID」列に挿入したいと思います。学生が 4 つ未満の設定を入力した場合、新しい「グループ ID」を作成して学生に割り当てる必要がありますが、グループごとに 5 ~ 8 人の学生という条件に違反していないことも確認する必要があります。

誰かがこれについて私を案内してもらえますか。4 つ以上の設定列にデータ (名前) が含まれている行を確認する方法は? 4 つ以上の設定を持つ学生が存在する場合、グループ テーブル (グループ ID (auto-inc)) に新しいレコードを挿入し、それを取得して学生の設定テーブルに挿入するにはどうすればよいですか。グループ ID を挿入する前に、5 ~ 8 人の学生の状態が違反していないことを確認するにはどうすればよいですか? これらの問題を (C# または SQL を使用して) 最も簡単な方法で解決する方法を見つけようとしています。C#でアプリケーションを書いています。

4

1 に答える 1

3

それはかなり恐ろしいテーブルのデザインです。複数のテーブルを使用すると、おそらくはるかに良いでしょう。1 つは学生/グループ用、もう 1 つは学生/好み用です。そう:

T_STUDENTS
StudentID
GroupID

T_STUDENT_PREFERENCES
StudentID
Preference

次に、設定テーブルをクエリするだけです。

select
studentid,
count(preference)
from
pref_table
group by
studentid
having count(preference) >4

それができないので、case ステートメントで何か危険なことをしなければなりません。

何かのようなもの

select
student,
case when preference1 <>''  then 1 else 0 end as pref1 //or something to check for empty/null,
case when preference2 <>'' then 1 else 0 end as pref2
....

次に、7 つの列を合計し、必要な数の設定をフィルター処理します。

于 2013-10-01T15:39:55.827 に答える