根据哪些行首先满足条件,在sql查询中排序行

时间:2011-10-12 17:31:57

标签: sql sql-server

我想知道是否在sql server中根据哪些行首先满足条件来排序行,例如,如果我正在编写这样的查询

SELECT * FROM IMAGES 
WHERE NAME LIKE '%TEST%'
AND DESCRIPTION LIKE '%TEST%'

我希望与名称匹配的行出现在与描述匹配的行之前,通常sql server会根据他们的ID排列它们,所以......无论如何要做到这一点?! (注意:我不想使用union语句,因为这会耗尽数据库)。

2 个答案:

答案 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;