試試這一個。
SELECT t.ItemID, g1.prefix, g1.GroupDesc
FROM Items i1
LEFT JOIN MyGroup g1 ON g1.Prefix = SUBSTRING(i1.ItemID,1,LEN(g1.Prefix))
RIGHT JOIN
(
SELECT i2.ItemID, max(len(g2.prefix)) AS ln
FROM Items i2
LEFT JOIN MyGroup g2 ON g2.Prefix = SUBSTRING(i2.ItemID,1,LEN(g2.Prefix))
GROUP BY i2.ItemID
) t ON i1.ItemID = t.ItemID AND len(g1.prefix) = t.ln
您可以測試它在這個測試數據:
CREATE TABLE dbo.MyGroup
(GroupDesc VARCHAR(100),
Prefix VARCHAR(10));
CREATE TABLE dbo.Items
(ItemDesc VARCHAR(100),
ItemID VARCHAR(10));
INSERT INTO MyGroup (GroupDesc, Prefix)
VALUES ('Group A', '19');
INSERT INTO MyGroup (GroupDesc, Prefix)
VALUES ('Group B', '19.10');
INSERT INTO MyGroup (GroupDesc, Prefix)
VALUES ('Group C', '19.10.3');
INSERT INTO Items (ItemDesc, ItemID)
VALUES ('Item 1', '19.10.4');
INSERT INTO Items (ItemDesc, ItemID)
VALUES ('Item 2', '19.10.3');
INSERT INTO Items (ItemDesc, ItemID)
VALUES ('Item 3', '19.20');
INSERT INTO Items (ItemDesc, ItemID)
VALUES ('Item 4', '44.55');
1)你能改變你的gro的結構嗎?起牀桌?能夠提前分解GroupDesc或添加「分數」列可能會有幫助。 2)您可能需要查看[PARSENAME](http://technet.microsoft.com/en-us/library/ms188006.aspx)函數,這可能有助於抓取對象ID的位,具體取決於它們確切的規格。 –
是的,我可以添加「評分」欄......但我無法理解這對我的情況有何幫助。謝謝你的回覆 – Nova