如何查询表Store(ID,Title,Company) 获取标题包含“term”的所有记录,首先显示完全匹配的记录,然后显示部分匹配。 换句话说,如果我正在寻找“foo”,我希望记录显示为
- 福和儿子们
- 好东西
- 富酒吧
- 足球
- 她的傻瓜
这是我所拥有的
Create PROCEDURE [dbo].[SearchUserInfo]
@query nvarchar(500),
@term nvarchar(500)
(SELECT Title,Company,
1 as match
FROM Stores
WHERE CONTAINS(Title, @query))
UNION
(SELECT Title,Company,
0 as match
FROM Stores
WHERE Title like '%' + @term +'%')
order by match desc
此查询的问题是它返回重复的记录。 如果我删除 0 作为匹配项,我不知道如何排序,因此 CONTAINS 的结果将出现在 LIKE 的结果之前。
谢谢
最佳答案
您可以合并两个结果集,然后使用 GROUP BY
删除重复项,并使用 ORDER BY MAX(match) DESC
放置 CONTAINS 返回的组
首先
;WITH CTE
AS (SELECT Title,
Company,
1 AS match
FROM Stores
WHERE CONTAINS(Title, @query)
UNION ALL
SELECT Title,
Company,
0 AS match
FROM Stores
WHERE Title LIKE '%' + @term + '%')
SELECT Title,
Company,
FROM CTE
GROUP BY Title,
Company
ORDER BY MAX(match) DESC
关于sql - 排序联合但保持不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848521/