我在表tblCountry中有一个字符串列,例如'印度,澳大利亚,美国,英国'。 现在无论提供什么序列,例如美国,德国,英国,印度,俄罗斯'我必须分开 以空格为基础的字符串,然后显示“列国家/地区”值中即使是单个国家/地区的所有结果。 至此,我通过以下查询实现了。现在困难的部分是我必须首先显示结果 具有列值的最大匹配。
例如,如果以下是列值:
'India, Austrailia, US, Italy'
'India, Malaysia, Austrailia, US, UK'
'UK, Austrailia, France, Korea, India'
'China, India, US, UK'
输入字符串是< Austrailia,英国,印度,韩国,德国'那么结果应该是最大匹配,如下所示:
对于上述情况,输出是最匹配的国家/地区的相关性,如下所示
'UK, Austrailia, France, Korea, India'
'India, Malaysia, Austrailia, US, UK'
'India, Austrailia, US, Italy'
'China, India, US, Brazil'
declare @matchCount int = 0;
SET @matchCount = (SELECT count(Item)
FROM dbo.SplitCountry('Austrailia, UK, India, Korea, Germany' , ',')
where Countries like '%'+Item+'%')
SELECT Countries, CASE
WHEN @matchCount >0 THEN @matchCount
ELSE 0
FROM tblCountry
我使用了一个函数来分割字符串' SplitCountry'。我也不能在这里使用全文
答案 0 :(得分:0)
你必须
使用split功能填充#t1,所以你有:
CountriesID国家/地区
1印度
1 Austrailia
1美国
1意大利
2印度
2马来西亚
2 Austrailia
2美国
2英国
3 ......等等
使用拆分函数填充#t2,因此t#包含输入值
SELECT#t1.CountriesID,c.Countries
FROM#t1
INNER JOIN#t2 on#t2.Country =#t1.Country
INNER JOIN tblCountry c ON c.CountriesID =#t1.CountriesID
GROUP BY#t1.ID,c .Countries
按COUNT排序(*)DESC
答案 1 :(得分:0)
最后进行了大量的研究,我为我的问题找到了一个简单的解决方案。以下查询对我来说非常有用
DECLARE @patterns TABLE( pattern VARCHAR(20) );
插入@patterns VALUES('%india%'),('%france%'),('%US%'), ('%UK%&#39)
;使用CTEORD AS ( 选择a。*,ROW_NUMBER()Over(按国家/地区分区,按p.pattern排序)AS RN FROM Countries a 加入@patterns p ON(a.country LIKE p.pattern) )
选择MAX(RN)作为RN,国家, 来自CTEORD集团的国家 由RN desc命令