如何计算SQL Server中超集中集合的现有值的数量

Ash*_*pta 5 sql database sql-server logic

我有这样的数据:

select 'a,b,d' as set, 'a,b,c,e,f' as superset
union
select 'a,h, as set, 'a,b,c,d,e' as superset
Run Code Online (Sandbox Code Playgroud)

需要输出为:

select 2 as existing_in_set, 1 as 'new'
union
select 1 as existing_in_set, 1 as 'new'
Run Code Online (Sandbox Code Playgroud)

Dav*_*itz 1

xquery (XML):计数 - 计数(不同值())

create table #mytable ([set] varchar(100),[superset] varchar(100))
insert into #mytable ([set],[superset]) values ('a,b,d','a,b,c,e,f'),('a,h','a,b,c,d,e')
Run Code Online (Sandbox Code Playgroud)
select  [set],[superset]    

       ,  x.value('count(                /r/e[text()!=""])' ,'int') 
        - x.value('count(distinct-values(/r/e[text()!=""]))','int') as common_elements  

from    (select  [set],[superset]   

                ,cast
                 (
                     '<r><e>'+replace([set]+','+[superset],',','</e><e>')+'</e></r>' 
                      as xml
                 ) as x

         from    #mytable
         ) t
Run Code Online (Sandbox Code Playgroud)
+-------+-----------+-----------------+
| set   | superset  | common_elements |
+-------+-----------+-----------------+
| a,b,d | a,b,c,e,f | 2               |
+-------+-----------+-----------------+
| a,h   | a,b,c,d,e | 1               |
+-------+-----------+-----------------+
Run Code Online (Sandbox Code Playgroud)