我有这样的数据:
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
需要输出为:
select 2 as existing_in_set, 1 as 'new'
union
select 1 as existing_in_set, 1 as 'new'
最佳答案
xquery (XML): count - count(distinct-values())
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')
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
+-------+-----------+-----------------+
| set | superset | common_elements |
+-------+-----------+-----------------+
| a,b,d | a,b,c,e,f | 2 |
+-------+-----------+-----------------+
| a,h | a,b,c,d,e | 1 |
+-------+-----------+-----------------+
关于sql - 如何计算SQL Server中超集中集合的现有值数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136087/