【发布时间】:2015-08-21 02:56:57
【问题描述】:
我不确定如何让 SQL 完成我想要解决的问题。我有一个学生,根据他们的年级,将在三所学校中的一所(学生)。
我只需要根据年级返回学生当前所在学校的 StudentID 和 SchoolID。请问这种方式怎么搜索?
期望结果(学生在 12 年级,因此 SchoolID 为 500):
谢谢。
【问题讨论】:
-
这个设计实在是太糟糕了。它是可怕的非规范化并且几乎在每一步都违反了规范化。学生当前成绩应保存在学生记录中,不得保存在其他任何地方。您违反了 1NF,因为您在提供成绩的单列中有多个数据点。
-
我同意,这不是我的设计,我不在一个会改变它的部门。这是从结合多个地方的数据的视图中获取的。可能不是最好的例子,但这是我必须使用的。我们确实必须跟踪每个 schoolID 提供的成绩。例如,有些学校没有 01,02 年级,而其他学校则有 01 到 05 年级。
-
学生的当前成绩保存在标准化表格和其他视图中的学生记录中。正是我正在处理的这个特殊视图将学校提供的所有成绩放在一个列中。
-
啊,一个观点……至少解释了那部分。可能也解释了所提供的成绩的分隔混乱。你有没有机会直接点击基表而不是使用这个视图?它会让你的生活轻松很多。搜索分隔数据时,您要么必须将其解析回行,要么执行非 SARGable 通配符 LIKE 搜索。
-
然后查看视图,看看数据是否正确规范化了一些地方
标签: sql sql-server tsql