sql order来自一个特定where子句的最佳匹配结果

时间:2014-07-24 15:28:07

标签: sql sql-server sql-order-by

您好我正在使用sql server 2008并且有一个大的存储过程,其中有多个where子句。在其中一个条款中,我有以下内容:

WHERE clause1
    AND (clause2)
    AND (clause3)
    AND (clause4)
    AND (clause5)
    AND (clause6) 
    AND ( COL1 LIKE '%' + @VARIABLE + '%' OR COL2 LIKE '%' + @VARIABLE + '%')

我希望在一个订单中显示结果,我得到的结果首先在第7条中与BOTH匹配,然后是匹配的结果。这可能吗?我尝试过一些东西,但到目前为止还没有任何工作。 E.g:

SELECT 
BLAH BLAH
FROM MULTIPLE TABLE JOINS
WHERE clause1
    AND (clause2)
    AND (clause3)
    AND (clause4)
    AND (clause5)
    AND (clause6) 
    AND ( COL1 LIKE '%' + @VARIABLE + '%' OR COL2 LIKE '%' + @VARIABLE + '%')
ORDER BY
(CASE WHEN COL1 LIKE '%'+ @VARIABLE + '%' AND COL2 LIKE '%' + @VARIABLE + '%' THEN 1 ELSE 0 END) DESC

SELECT BLAH BLAH, (case when COL1 LIKE '%'+ @VARIABLE + '%' then 1 else 0 end) +
      (case when COL2 LIKE '%'+ @VARIABLE + '%' then 1 else 0 end) as [priority]
FROM MULTIPLE TABLE JOINS
WHERE clause1
    AND (clause2)
    AND (clause3)
    AND (clause4)
    AND (clause5)
    AND (clause6) 
    AND ( COL1 LIKE '%' + @VARIABLE + '%' OR COL2 LIKE '%' + @VARIABLE + '%')
ORDER BY [Priority]

还有一些但没有任何效果......

1 个答案:

答案 0 :(得分:0)

您的第一个查询是根据您的条件订购:

CASE WHEN COL1 LIKE '%'+ @VARIABLE + '%' AND COL2 LIKE '%' + @VARIABLE + '%' THEN 1 ELSE 0 END

但是你的WHERE条款多余了:

COL1 LIKE '%'+ @VARIABLE + '%' AND COL2 LIKE '%' + @VARIABLE + '%'

CASE语句从您的ORDER BY添加到SELECT,并且每行都会看到它1,因此{{ 1}}正在按预期工作,它只是没有影响,因为所有记录都是由ORDER BY订购的,如果您提供有关如何订购的其他详细信息,则需要更改1条件有人肯定可以提供帮助。