在搜索互联网之后,我可以自信地说我找不到另一个有同样问题的帖子,所以让我解释一下我想要做什么。
我想要做的是从Members表中选择所有名称,并计算每个名称在Call表的字符串列中出现的次数。
注意:Call表中的Members列是一个varchar,它接收来自我的应用程序的连接字符串。
Member Table Call Table
FirstName LastName Members Officers
-------- -------- ------- --------
John Smith John Smith,John Smith2 John Smith
John Smith2 John Smith,John Smith3 John Smith2
John Smith3 John Smith2 John Smith,John Smith3
John Smith4 John Smith2,John Smith3 John Smith3
我想要的是什么:
FullName nameCount
-------- ---------
John Smith 4
John Smith2 5
John Smith3 4
John Smith4 0
我在其他地方看到的方法并不是很成功。任何帮助都会很棒。
答案 0 :(得分:1)
它不会很快但你可以使用外卡加入表格 - 比如
SELECT *
FROM Member M
JOIN Call C ON C.Members LIKE '%' ||M.FirstName || ' ' || M.LastName || '%'
这将为您提供所有成员的呼叫表中的所有位置。
现在只是分组并计数。
SELECT M.FirstName || ' ' || M.LastName as FullName, COUNT(*) as nameCount
FROM Member M
JOIN Call C ON C.Members LIKE '%' ||M.FirstName || ' ' || M.LastName || '%'
GROUP BY M.FirstName || ' ' || M.LastName
重新阅读你的问题我不是名字末尾的1,2,3。大多数数据不是这样的,但如果你的数据不是那么你需要防范 - 就像这样:
SELECT M.FirstName || ' ' || M.LastName as FullName, COUNT(*) as nameCount
FROM Member M
JOIN Call C ON (C.Members LIKE '%' ||M.FirstName || ' ' || M.LastName || ',%') OR
(C.Members LIKE '% ' ||M.FirstName || ' ' || M.LastName)
GROUP BY M.FirstName || ' ' || M.LastName
这只会查找名称后面带有,
或前面有空格的名称。