如何解决找到两列之间的差异,进行澄清
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 举报,一经查实,本站将立刻删除。