Here is one way: Recursive CTE
;WITH data
AS (SELECT [set],
superset,
cs.Item,
cs.ItemNumber
FROM (VALUES ('a,t,h', 'a,b,c,d,e,f' ),
('a,h','a,b,c,d,e' )) tc ([set], superset)
CROSS apply [Delimitedsplit8k]([set], ',') cs),
cte
AS (SELECT [set],
superset,
Item,
Replace(',' + superset, + ',' + Item, '') AS result,
ItemNumber
FROM data
WHERE ItemNumber = 1
UNION ALL
SELECT
d.[set],
d.superset,
d.Item,
CASE
WHEN LEFT(Replace(',' + result, ',' + d.Item, ''), 1) = ',' THEN Stuff(Replace(',' + result, ',' + d.Item, ''), 1, 1, '')
ELSE Replace(',' + result, ',' + d.Item, '')
END,
d.ItemNumber
FROM cte c
JOIN data d
ON c.superset = d.superset
AND d.ItemNumber = c.ItemNumber + 1)
SELECT TOP 1 WITH ties [set],superset,
(len(superset) - len(Isnull(Stuff(result, 1, 1, ''), '')))/2 as Existing_in_set,
len(replace([set],',','')) - ((len(superset) - len(Isnull(Stuff(result, 1, 1, ''), '')))/2) as New
FROM cte
ORDER BY Row_number()OVER(partition BY superset ORDER BY ItemNumber DESC)
Sent from my old answer
SQL Server Remove some specific characters from a string
Separator line Function code from http://www.sqlservercentral.com/articles/Tally+Table/72993/