我有两个表:
资料来源:
(SName) (SId)
Apple1 100
Apple2 200
Banks 300
BanksB 400
Bankerly 500
Run Code Online (Sandbox Code Playgroud)
前缀:
(PName) (PId)
App 1
Bank 2
Banker 3
Run Code Online (Sandbox Code Playgroud)
我的目标:找到与每个来源匹配的最长前缀。结果如下所示:
(SName) (SId) (PName) (PId)
Apple1 100 App 1
Apple2 200 App 1
Banks 300 Bank 2
BanksB 400 Bank 2
Bankerly 500 Banker 3
Run Code Online (Sandbox Code Playgroud)
限制条件:我使用的是 SQL Server 2000 并且无法升级。我知道如何使用分析函数解决这个问题,但据我所知,它们在 SQL Server 2000 中不可用。
一种方式(SQL小提琴)
SELECT SName,
SId,
LEFT(SName, MAX(LEN(PName))) AS PName,
CAST(SUBSTRING(MAX(STR(LEN(PName), 10) + LTRIM(PId)), 11, 10) AS INT) AS PId
FROM Sources S
JOIN Prefixes P
ON S.SName LIKE P.PName + '%'
GROUP BY SId,
SName
ORDER BY SId
Run Code Online (Sandbox Code Playgroud)
我假设所有前缀都不允许包含%会扰乱LIKE搜索的字符。
它使用该方法的一个变型中列出5这篇文章TOP N每组查询在捆扎PId用沿MAX(length)。一旦MAX(length)知道它就可以用来重新计算前缀必须是什么,所以不需要添加PName到串联中。
| 归档时间: |
|
| 查看次数: |
567 次 |
| 最近记录: |