我在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 students.Not,所有学生都会输入首选项.要创建一个组,我将检查输入4-7首选项的学生,并将它们添加到组中。例如,学生A输入了4个首选项。包括学生A,现在我有5名学生的最低人数要求小组。因此,我想插入“组表”并检索该数字,并在“组ID”列中插入每个学生。如果学生输入的偏好少于4个,我将不得不创建一个新的“组id”并分配给学生,但我也必须检查每个组的5-8名学生没有被违反。
有人能帮我指点一下吗。如何检查多于4个首选项列包含数据(名称)的行?如果存在4个以上的首选项,那么如何在Groups表(Group (auto-inc))中插入新的记录并将其检索回来以插入“学生偏好”表。在插入组id之前,我如何检查5-8个学生的状态没有被破坏?我试图找出如何以最简单的方式解决这些问题(使用c#或SQL)?我正在用C#编写应用程序。
发布于 2013-10-01 15:39:55
这是个很糟糕的桌子设计。如果有多张桌子,你可能会更好。一个用于学生/团体,另一个用于学生/偏好。所以:
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列相加,并筛选出所需的首选项数。
https://stackoverflow.com/questions/19120053
复制相似问题