我一直在使用CONTAINSTABLE
在我的查询中进行关键字匹配。我被要求扩展我们的功能,以便在特定列上加权。我有一个更简单的查询显示如下:
SELECT [KEY], sum(rnk) as weightRank
FROM
(
SELECT RANK * 0.05 as rnk, * from CONTAINSTABLE (FundraisingPages, Description, 'marathon')
union all
SELECT RANK * 1 as rnk, * from CONTAINSTABLE (FundraisingPages, Title, 'marathon')
) as t
group by [KEY]
order by weightRank desc
这很好,它会按照我的要求返回[Key]
和weightRank
,但我还希望它返回所有FundraisingPages
列。但是,我似乎无法将其转换为SELECT
语句。
我已尝试过*
和FundraisingPages.*
,但收到以下错误消息
列't.rnk'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
现在我知道我只是在查询的rnk
部分中选择FROM
,但是任何尝试返回更多内容我都会收到以下消息
't'多次指定了'KEY'列。
我知道我选择了KEY
而且我只能假设ID
中的FundraisingPages
不止一次,这可能就是我看到这些错误的原因,但是似乎我甚至无法从该表中选择一个单一列而不会出现进一步的错误。
答案 0 :(得分:0)
我需要JOIN
KEY
等于我的表的ID
列,然后GROUP BY
表格中的每一列:
SELECT SUM(rnk) as weightRank, fp.*
FROM
(
SELECT RANK * 0.05 as rnk, [key] from CONTAINSTABLE (FundraisingPages, [Description], @Keywords)
UNION ALL
SELECT RANK * 1 as rnk, [key] from CONTAINSTABLE (FundraisingPages, Title, @Keywords)
) AS t
JOIN
FundraisingPages as fp on fp.PageId = [KEY] WHERE STATUS = 'L'
GROUP BY [KEY], fp.PageId, fp.Status, fp.Title, fp.SubTitle, fp.Url, fp.ImageUrl, fp.Description, fp.RecipientName, fp.CharityNumber, fp.FundraiserFirstName, fp.FundraiserLastName, fp.InsertDate, fp.UpdateDate
ORDER BY weightRank DESC