好吧,我有两张桌子。表 1 具有参考数字列 (A),第二列具有随机性字符串 (B)。 Table2 只有一列,其中的值列表可能位于也可能不位于 Table1 的字符串中。
dbo.Tbl_1
+--+---------------------------------------+
|A |B |
+--+---------------------------------------+
|24|BLUE; KITTEN; WHITE; PINK; SLOPE; GREEN|
+--+---------------------------------------+
|51|GREEN; CLOUDY; WHITE; CHIPS |
+--+---------------------------------------+
|78|PATRIOTS; PINK; PINK; WHITE |
+--+---------------------------------------+
|22|WHITE; RED; TREES; AMY; GREEN |
+--+---------------------------------------+
dbo.Tbl_2
+-----+
|C |
+-----+
|BLUE |
+-----+
|WHITE|
+-----+
|PINK |
+-----+
|BROWN|
+-----+
哪个 SQL 查询将确定在 Table1 的字符串中找到 Table2 中的值的次数?基本上我想返回以下结果集:
+-----+----+
|BLUE |1 |
+-----+----+
|WHITE|4 |
+-----+----+
|PINK |3 |
+-----+----+
|BROWN|NULL|
+-----+----+
仅供参考:实际上,Table2 有大约 200 条唯一记录。表 1 包含大约 160 万条带有唯一参考号的记录。两个表都不是静态的。
我玩了一下然后想出了这个SQL小提琴
相关的 SELECT 查询如下所示(不过需要两次表扫描,我确信它可以变得更高效):
select C, sum(dbo.CountOccurancesOfString(B, C)) as number
from Tbl_1 join Tbl_2 on 1=1
group by C
order by number desc
EDIT这是我从中得到的功能这个答案:
CREATE FUNCTION dbo.CountOccurancesOfString
(
@searchString nvarchar(max),
@searchTerm nvarchar(max)
)
RETURNS INT
AS
BEGIN
return (LEN(@searchString)-LEN(REPLACE(@searchString,@searchTerm,'')))/LEN(@searchTerm)
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)