根据哪些行首先满足条件对sql查询中的行进行排序

Maz*_*lih 2 sql sql-server

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

SELECT * FROM IMAGES 
WHERE NAME LIKE '%TEST%'
AND DESCRIPTION LIKE '%TEST%'
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*acs 6

首先,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;
Run Code Online (Sandbox Code Playgroud)


JNK*_*JNK 5

你可以CASE在你的ORDER BY子句中使用语句来得到你想要的东西。

ORDER BY CASE(WHEN NAME LIKE '%TEST' THEN 1 ELSE 0 END) DESC
Run Code Online (Sandbox Code Playgroud)

编辑:

在 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
Run Code Online (Sandbox Code Playgroud)