If i understand you correctly...
I'd suggest to use
CTE[
^]. See:
DECLARE @tmp TABLE(CurrentValue NVARCHAR(30), MasterListofvalue NVARCHAR(150))
INSERT INTO @tmp (CurrentValue, MasterListofvalue)
VALUES('A', 'Aa;B;C;D'),
('B', 'A;B;C;D'),
('C', 'A;B;C;D')
;WITH CTE AS
(
SELECT CurrentValue, MasterListofvalue, LEFT(MasterListofvalue, CHARINDEX(';', MasterListofvalue)-1) AS PartOfMasterList,
RIGHT(MasterListofvalue, LEN(MasterListofvalue) - CHARINDEX(';', MasterListofvalue)) AS Remainder
FROM @tmp
WHERE CHARINDEX(';', MasterListofvalue)>0
UNION ALL
SELECT CurrentValue, MasterListofvalue, LEFT(Remainder, CHARINDEX(';', Remainder)-1) AS PartOfMasterList,
RIGHT(Remainder, LEN(Remainder) - CHARINDEX(';', Remainder)) AS Remainder
FROM CTE
WHERE CHARINDEX(';', Remainder)>0
UNION ALL
SELECT CurrentValue, MasterListofvalue, Remainder AS PartOfMasterList, NULL AS Remainder
FROM CTE
WHERE CHARINDEX(';', Remainder)=0
)
SELECT CurrentValue, MasterListofvalue, COALESCE(MAX(ExactMatch), 'N/A') AS ExactMatch, MAX(SimilarMatch) AS SimilarMatch
FROM (
SELECT t.*, CASE WHEN c.MasterListofvalue = t.CurrentValue THEN t.CurrentValue ELSE NULL END AS ExactMatch,
CASE WHEN c.PartOfMasterList = t.CurrentValue THEN t.CurrentValue ELSE NULL END AS SimilarMatch, c.PartOfMasterList
FROM @tmp as t
LEFT JOIN CTE AS c ON c.CurrentValue = t.CurrentValue
) AS Final
GROUP BY CurrentValue, MasterListofvalue
ORDER BY CurrentValue
Result:
CurrentValue MasterListofvalue ExactMatch SimilarMatch
A Aa;B;C;D N/A NULL
B A;B;C;D N/A B
C A;B;C;D N/A C