Sql server Sql Server:编写一个逐步放松约束的查询
我们有一个存储过程,希望找到可能的最佳匹配,但如果找不到初始结果,我们希望放松一些约束,这样我们至少可以返回一些结果 目前,这是通过使用不同的where子句重复执行同一查询并在查询返回任何结果时停止来完成的。比如:Sql server Sql Server:编写一个逐步放松约束的查询,sql-server,Sql Server,我们有一个存储过程,希望找到可能的最佳匹配,但如果找不到初始结果,我们希望放松一些约束,这样我们至少可以返回一些结果 目前,这是通过使用不同的where子句重复执行同一查询并在查询返回任何结果时停止来完成的。比如: select * from table where (field1 = @param1 and field2 = @param2 and field3 = @param3) if @ROWCOUNT = then select * from table where (fiel
select * from table where (field1 = @param1 and field2 = @param2 and field3 = @param3)
if @ROWCOUNT = then
select * from table where (field1 = @param1 and field2 = @param2)
-- ... etc.
但是,我不喜欢这种方法,因为它意味着多次重复查询,所以我希望能够做同样的事情,并尽量减少重复
SELECT TOP 1 WITH TIES *
FROM table
WHERE ( field1 = @param1 AND field2 = @param2 )
ORDER BY CASE WHEN field1 = @param1 THEN 1 ELSE 0 END +
CASE WHEN field2 = @param2 THEN 1 ELSE 0 END +
CASE WHEN field3 = @param3 THEN 1 ELSE 0 END
DESC