drop table tblEmployeesdrop table tblCategoriesCREATE TABLE tblCategories(CategoryID[INT],CategoryName[VARCHAR](30))CREATE TABLE tblEmployees(EmployeeID[INT],EmployeeName[VARCHAR](30),CategoryIDs[VARCHAR](30))INSERT INTO tblCategories( CategoryID,CategoryName)SELECT '1','AAA' UNION ALLSELECT '2','BBB' UNION ALLSELECT '3','CCC'INSERT INTO tblEmployees(EmployeeID,EmployeeName,CategoryIDs) SELECT '1','XXX','1,3' UNION ALL SELECT '2','YYY','2,3' UNION ALL SELECT '3','ZZZ','1,2'
SELECT * FROM tblEmployees cross apply master.dbo.DelimitedSplit8K(CategoryIDs,',')
select * from tblCategories LEFT OUTER JOIN ( SELECT * FROM tblEmployees cross apply master.dbo.DelimitedSplit8K(CategoryIDs,',') ) MyAlias On tblCategories.CategoryID = MyAlias.Item