我在MSSQL数据库中有这两个表。
学生偏好表 (此表的首选项列在数据库中编号为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名学生团体所需的最低人数。所以,我想在“Groups table”中插入并检索该号码并在每个学生的“Group ID”列中插入。 如果学生输入少于4个偏好,我将不得不创建一个新的“组ID”并分配给学生,但我还必须检查每组5-8名学生是否违反。
有人可以指导我这个。 如何检查超过4个首选项列包含数据(名称)的行? 如果存在超过4个首选项的学生,那么我如何在“组”表(组ID(auto-inc))中插入新记录并将其检索回以插入“学生偏好”表中。 如何在插入组ID之前检查5-8名学生的情况是否违反? 我试图找出如何以最简单的方式解决这些问题(使用c#或SQL)? 我正在用C#编写应用程序。
答案 0 :(得分:3)
这是一个非常糟糕的桌面设计。使用多个表可能会好多了。一个用于学生/小组,一个用于学生/偏好。所以:
T_STUDENTS
StudentID
GroupID
T_STUDENT_PREFERENCES
StudentID
Preference
然后您可以简单地查询您的偏好表:
select
studentid,
count(preference)
from
pref_table
group by
studentid
having count(preference) >4
由于你不能这样做,你必须对案例陈述做一些粗略的事情。
像
这样的东西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列添加并过滤所需的首选项数量。