Aij*_*han 2 sql-server sql-server-2008
我输入了一个单词"boat",所以我需要以船开头的记录,还包含"船".但是从"船"开始必须首先出现
我试过跟随
Select AsiccCodeId,AsiccDescription
FROM AsiccCodeMaster c
WHERE c.AsiccDescription like 'boat%' or c.AsiccDescription like '%boat%'
Run Code Online (Sandbox Code Playgroud)
和
select a.* from
(
Select AsiccCodeId,AsiccDescription
FROM AsiccCodeMaster c
WHERE c.IsActive = 1 and (GoodFor = 'M' or GoodFor = 'B')
and c.AsiccDescription like 'Unmilled%'
UNION
Select AsiccCodeId,AsiccDescription
FROM AsiccCodeMaster c
WHERE c.IsActive = 1 and (GoodFor = 'M' or GoodFor = 'B')
and c.AsiccDescription like '%Unmilled%'
)a
Run Code Online (Sandbox Code Playgroud)
但它给了我
4137 Combustion Boats
6360 Boat, Fibre
6361 Boat, Rubber - Motorized
6362 Boat, Wooden Canal Boats
6363 Boat, Wooden With Engine
6370 Wooden Boats Body Building
6374 Boat, Rowing / Sports
6375 Boat, Rubber - Nonmotorized
6376 Boat, Wooden Without Engine-Others
6379 Parts Of Ships, Boats Etc., N.E.C
6391 Ships, Boats & Other Vessels, N.E.C
6394 Ships, Boats & Other Vessels, N.E.C
Run Code Online (Sandbox Code Playgroud)
我需要先以"船"开头的记录,然后是包含"船"的记录
Eva*_*n M 10
在Order By子句中使用CASE语句
SELECT AsiccCodeId,AsiccDescription
FROM AsiccCodeMaster c
WHERE c.AsiccDescription like '%boat%'
ORDER BY CASE WHEN c.AsiccDescription like 'boat%' THEN 0 ELSE 1 END, c.AsiccDescription
Run Code Online (Sandbox Code Playgroud)
由于您希望以"船"开头的标题首先出现,因此CASE语句将优先考虑这些标题.它查看每条记录,如果描述以'boat'开头,则为其分配一个排序值0,否则它会为其分配一个排序值1. ORDER BY默认按升序排序,因此它将全部放入0(在所有1(剩余记录)之前以'船'开头的那些