我想知道是否在sql server中根据哪些行首先满足条件来排序行,例如,如果我正在编写这样的查询
SELECT * FROM IMAGES
WHERE NAME LIKE '%TEST%'
AND DESCRIPTION LIKE '%TEST%'
我希望与名称匹配的行出现在与描述匹配的行之前,通常sql server会根据他们的ID排列它们,所以......无论如何要做到这一点?! (注意:我不想使用union语句,因为这会耗尽数据库)。
答案 0 :(得分:4)
您可以在CASE
子句中使用ORDER BY
语句来获取您所追求的内容。
ORDER BY CASE(WHEN NAME LIKE '%TEST' THEN 1 ELSE 0 END) DESC
修改强>
示例代码作为SQL Server中的概念证明:
DECLARE @t table(id int)
INSERT INTO @t
VALUES
(1),
(2),
(3),
(4),
(5)
SELECT *
FROM @t
ORDER BY(CASE WHEN id > 3 THEN 1 ELSE 0 END) DESC
答案 1 :(得分:3)
首先,UNION不一定会耗尽数据库;正如所写的那样,根据查询优化器决定如何处理它,它在性能方面可能没有任何区别。
其次,由于你的where子句包含“AND”,你的所有结果都会在描述和名称上匹配,所以我认为这不是你想要的。
第三,假设您的查询中有“OR”,您可以尝试这样的事情:
select
*
from
images i
where
i.name like '%TEST%'
or i.description like '%TEST%'
order by
case
when i.name like '%TEST%' then 0
else 1
end asc;