我不确定该问题的标题是什么,但是如果您有更好的主意,可以随时对其进行编辑。
假设我有如下数据:
Column A Column B
John, Sally, Cindy John, Sally, Cindy, Steve
John, Cindy John, Sally, Cindy
Sally, Cindy Sally, Cindy
Sally, Steve John, Sally, Steve
我想做的就是找到差异。我想查看column B
中存在的内容,而不是column A
中存在的内容,因此我有一个看起来像这样的列:
Column C
Steve
Sally
''
John
有什么建议可以解决吗?
编辑#1:
表不是这样存储的,该表每个单元格没有多个值;但是,我正在从SQL查询中发送报告,其任务是显示与columns a and b
的区别,其中column C
具有多个这样的值。
这是到目前为止,我的SQL查询当前在结果中的样子。
编辑#2:
表中每个记录/列的交集没有多个值。为了使最终用户更容易查看报告,我在SQL查询结果的交集中放置了多个值,因此请显示其中有什么。
我正尝试创建Column A
来显示差异。
编辑#3:
Column B
来自一个数据源
Cell
来自另一个数据源。
A和B并不是彼此的子集,我只是采用两列,并试图以一种更简单的方式找到差异。
答案 0 :(得分:2)
不清楚是否要将多个差异汇总到一个定界的单元格中。
示例
Declare @YourTable table (ColA varchar(150),ColB varchar(150))
Insert Into @YourTable values
('John, Sally, Cindy','John, Sally, Cindy, Steve'),
('John, Cindy','John, Sally, Cindy'),
('Sally, Cindy','Sally, Cindy'),
('Sally, Steve','John, Sally, 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, Cindy John, Sally, Cindy, Steve Steve
John, Cindy John, Sally, Cindy Sally
Sally, Cindy Sally, Cindy
Sally, Steve John, Sally, Steve John
答案 1 :(得分:1)
另一种方法是使用功能
create function dbo.getdiff(@colA varchar(100), @colB varchar(100))
returns varchar(100)
as
begin
return (select stuff((select ',' + value from(
select trim(value) value FROM string_split(@colB, ',')
EXCEPT SELECT trim(value) FROM string_split(@colA, ',')) x for xml path('')),1,1,''))
end
并获得理想的结果
select cola, colb, dbo.getdiff(cola, colb) diff from summarytable