微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到两列之间的差异,进行澄清

如何解决找到两列之间的差异,进行澄清

question中所述 假设我有如下数据:

Declare @YourTable table (ColA varchar(150),ColB varchar(150))
Insert Into @YourTable values
('John,Sally','John,Sally,Cindy,Steve')

Select A.*,B.*
 From  @YourTable A
 Outer Apply (
               Select Diff=value
                From (
                       Select value=ltrim(rtrim(value)) From string_split(ColA,',')
                       Union All
                       Select value=ltrim(rtrim(value)) From string_split(ColB,')
                     ) B1
                Group By Value
                Having count(*)=1
             ) B

你有

ColA                ColB                        Diff
John,Sally         John,Steve   Cindy
John,Steve   Steve

但是如何获得

ColA                ColB                        Diff
John,Steve   Cindy,Steve

解决方法

一种方法是string_agg(),我将其放入apply子查询中:

Select A.*,B.*
 From  @YourTable A Outer Apply
       (select string_agg(diff,',') as diff
        from (Select Diff=value
              From (Select value=ltrim(rtrim(value)) From string_split(ColA,')
                    Union All
                    Select value=ltrim(rtrim(value)) From string_split(ColB,')
                   ) B1
              Group By Value
              Having count(*)=1
             ) B
       ) B;

但是我认为使用full join更简单:

select A.*,B.*
from @YourTable A outer apply
     (select string_agg(coalesce(trim(a.value),trim(b.value)),') as diff
      from string_split(ColA,') a full join
           string_split(ColB,') b
           on trim(a.value) = trim(b.value)
      where a.value is null or b.value is null
     ) b;

Here是db 小提琴。

,

您可以从查询中选择并汇总结果:

select cola,colb,string_agg(diff,') as diffs
from ( <your query> ) q
group by cola,colb;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。