Jed*_*dja 13 sql t-sql sql-server-2008 sql-server-2008-r2
假设我有一个用户名表:
Id | Name
-----------
1 | Bobby
20 | Bob
90 | Bob
100 | Joe-Bob
630 | Bobberino
820 | Bob Junior
Run Code Online (Sandbox Code Playgroud)
我想n在'Bob'的名称上返回一个匹配列表,其中结果集首先包含完全匹配,然后是类似的匹配.
我觉得这样的事情可能有用
SELECT TOP 4 a.* FROM
(
SELECT * from Usernames WHERE Name = 'Bob'
UNION
SELECT * from Usernames WHERE Name LIKE '%Bob%'
) AS a
Run Code Online (Sandbox Code Playgroud)
但有两个问题:
我正在寻找一个将返回的查询(对于TOP 4)
Id | Name
---------
20 | Bob
90 | Bob
(and then 2 results from the LIKE query, e.g. 1 Bobby and 100 Joe-Bob)
Run Code Online (Sandbox Code Playgroud)
这可能在一个查询中吗?
And*_*mar 16
您可以使用a case将完全匹配放在最上面:
select top 4 *
from Usernames
where Name like '%Bob%'
order by
case when Name = 'Bob' then 1 else 2 end
Run Code Online (Sandbox Code Playgroud)
或者,如果您担心性能并且有索引(Name):
select top 4 *
from (
select 1 as SortOrder
, *
from Usernames
where Name = 'Bob'
union all
select 2
, *
from Usernames
where Name like '%Bob%'
and Name <> 'Bob'
and 4 >
(
select count(*)
from Usernames
where Name = 'Bob'
)
) as SubqueryAlias
order by
SortOrder
Run Code Online (Sandbox Code Playgroud)