我有以下的(简化)表在左外连接表
表产品
ID
Title
表Data_Tags
ID
ForeignID
Tag
上有case语句返回单行为产品ID 1添加两个标签:'固体'和'强'
下面的查询将返回2行,如果我添加DISTINCT它将只返回1行按预期。
SELECT Products.ID, Products.Title
FROM Products LEFT OUTER JOIN Data_Tags ON Products.ID = Data_Tags.ForeignID
WHERE (Products.ID = 1)
我想一个CASE语句添加到查询计算特别相关的某些关键字
CASE WHEN CONTAINS(Data_tags.tag, 'solid') THEN 100 ELSE 0 END AS TagsMatch
查询将成为本:
SELECT DISTINCT Products.ID, Products.Title, CASE WHEN CONTAINS(Data_tags.tag, 'solid') THEN 100 ELSE 0 END AS TagsMatch
FROM Products LEFT OUTER JOIN Data_Tags ON Products.ID = Data_Tags.ForeignID
WHERE (Products.ID = 1)
当运行查询,它将返回两行,这是非常有意义的,因为它将输出100代表'固体'(匹配)和0代表'强'(不匹配)标签
但是我不确定如何修改查询,只返回值为0的单个行,如果没有相关的标记匹配,则返回100,如果任何相关的标记匹配,则返回100。
我还想避免子查询尽可能保持最佳性能。
我正在使用MS SQL Server 2014.
请指教。非常感谢你!
使用'MAX(CASE ....)'和'集团通过Product.ID' – 1000111
一起当我尝试这种情况发生时的错误:“全文谓词不能出现在aggegrate表达。将聚合表达式放在子查询' – Onthrax
中您使用了错误的标签。而是标记'SQL-SERVER'并删除'MySQL' – 1000111