试试这一个。
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