我已在主板和其他地方寻找答案 - 我猜这个问题已经解决了,但由于某种原因,我找不到我需要的东西......所以,我我会问并希望这不是一个重复的问题。
我所拥有的是MSSQL数据库中的学生和员工列表。其中一列包含一个包含当前术语(学期)的字符串,其中包含学生注册的每个班级的标识符,由“;”分隔对于每个条目。
我想弄清楚的是如何返回在本学期注册超过4个班级的学生的价值。要计算当前学期注册的所有学生的数量,查询很简单:
SELECT COUNT(*) AS Current_Students
FROM UserData
WHERE StuTermClassString LIKE '%2163%'
这可以很好地返回学生总数,但我需要一种方法来返回全日制学生的价值(那些每学期超过11学时的学生,通常是4 +班)。所以我需要一种方法来确定记录的'%2163%'的类数何时为>如果我没有充分解释这个问题,请告诉我,我会更多地进行扩展。谢谢!
答案 0 :(得分:0)
直接回答您的问题:
WHERE StuTermClassString LIKE "%2163%;%;%;%;%"
< - 假设学期指示符在类名之前,并且每个类名后面都有分号。
但是,我可以建议更合理的数据库结构吗?您可以拥有第二个注册表,而不是在您的Student表中有一列包含; -delimited类名称,其中每一行都有一个学生ID(指学生表中的一行),一个学期编号,和一个类名。这样,您可以通过以下方式查询具有超过一定数量类别的学生:
SELECT student_id FROM Registrations WHERE semester_number = "2163" GROUP BY student_id HAVING COUNT(student_id) > 3
答案 1 :(得分:0)
不幸的是,处理在SQL中打包成字符串的伪数组。
您需要创建一个字符串拆分函数来解析列表字符串中的各个项目,并将它们显示为表格变量。
请参阅:http://sqlperformance.com/2012/07/t-sql-queries/split-strings
有很多方法可以做到这一点,但你应该得到一个表变量,它可以使用标准的内置面向集合的SQL函数来找到你需要的东西。