Sql-Server-2000

查找最長匹配前綴

  • December 20, 2012

我有兩張桌子:

資料來源:

(SName)  (SId)
Apple1   100
Apple2   200
Banks    300
BanksB   400
Bankerly 500

前綴:

(PName) (PId)
App     1
Bank    2
Banker  3

**我的目標:**找到與每個來源匹配的最長前綴。結果將如下所示:

(SName)  (SId) (PName) (PId)
Apple1   100   App     1
Apple2   200   App     1
Banks    300   Bank    2
BanksB   400   Bank    2
Bankerly 500   Banker  3

**限制:**我使用的是 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   

我假設不允許任何前綴包含諸如%會混淆LIKE搜尋的字元。

它使用本文關於 TOP N Per Group Queries 的清單 5 中方法的變體來PIdMAX(length). 一旦MAX(length)知道了,它就可以用來重新計算前綴必須是什麼,因此不需要添加PName到串聯中。

引用自:https://dba.stackexchange.com/questions/30788