问题:
如何在.NET中使用SQL Server构建这样的搜索?注意"分数"和" Max"列。 (这些不是我的条款。" Max"似乎代表查询的最大值,"分数"代表搜索获得的值,小于或等于"最大"。)
详细信息:
观
否则,我不知道从哪里开始。谢谢!
答案 0 :(得分:0)
这个答案并不试图代表一个完整的解决方案,而是一些关于如何开始的提示。
我想象一个存储过程,其目的是根据提供的条件查询基础数据表。
对于每个表单字段,都有一个参数给出。例如,@name_first varchar(254)
代表相关的表单字段。重要的是传递给存储过程的NULL
值表示未提供特定的表单字段(或者选择 ANY )。
对于要搜索的数据集中的每一行,将计算得分。确切的公式取决于您,但一般规则可能是
NULL
时,字段的结果为零示例:
select ...,
case
when name_first == @name_first then 100 --exact match
else
case
when name_first like '%'+@name_first+'%' then 50 --partial match
else
0 --either @name_first is null or column does not match
end
end
+
case
when sex == @sex then 150
else
0
end
+
...
--when SSN matches add up a huge score such as 900
from <dataset>
最终结果只包含那些提供得分高于某个最小数字(即1)的行。
至于屏蔽SSN,这就像(在SELECT
子句中)
... case when @social_security_number = social_security_number then social_security_number else '-' end as social_security_number ...
我无法推断Score
和Max
之间的关系。出生日期需要更复杂的条件表达。此外,分数是在子查询中计算还是交叉应用是一个如何以可读和高效的方式编写所有必需条件的问题。关于此的任何有用提示,数据太少。