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

标签 sql sql-server database 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

需要输出为:

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/

相关文章:

java - 为大文件构建动态查询

sql - 查询以查找用户参与的所有消息

sql - 更新多行时出现错误 "duplicate key value violates unique constraint"

sql-server - 批量插入中跳过错误的行

使用共享实体管理器进行 Java 批量插入

SQL连接表及限制条件匹配结果

sql - SQL中的父子记录关系?

sql-server - SQL 级联删除多列

AngularJS:将本地化的用户输入数据存储在翻译 json 文件或数据库中

database - 架构设计 : How do you incorporate "total"?