两个dataset 比较数据差异

放逐之刃--瑞文 2020-07-21 09:45:45
A1表
AA 15
BB 10
CC 7

B1表
AA 19
CC 5

用A1表来当主表的话,列出来的差异就是
AA 4
BB -10
CC -2

就意味这 B1表中AA 比主表多4个,BB比主表少10个,CC比主表少2个

我现在能想到的就是在后台循环对比 ,数据比较多,耗时间,有没有什么简便的方法,SQL语句也可以



...全文
1065 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 12 楼 正怒月神 的回复:
[quote=引用 9 楼 ManBOyyy 的回复:][quote=引用 5 楼 放逐之刃--瑞文 的回复:][quote=引用 4 楼 正怒月神 的回复:]很久不见的ID啊。 你稍微改一下,我是A表-B表
select * from u1;
select * from u2;

select u1.name,(u1.tid-isnull(u2.tid,0)) as tid from u1
left join u2 on u1.name=u2.name
是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了[/quote] 你這種方法還是有弊端,比如A表沒有,B表有,應該先全連接tid,然後再匹配才對的[/quote] 这个问题要看,你是什么业务逻辑了。 是以哪张表为基准,还是彼此的差集都要找到。 就一个思路。[/quote] 谢谢大家啦,给了我思路,然后按照思路我自己写了存储过程,用游标和临时表写出来了
正怒月神 2020-07-21
  • 打赏
  • 举报
回复
引用 7 楼 放逐之刃--瑞文 的回复:
[quote=引用 6 楼 正怒月神 的回复:][quote=引用 5 楼 放逐之刃--瑞文 的回复:] 是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了
软件行业,应该还是深圳发达吧。 怎么突然到回武汉了。[/quote] 是啊,我那个时候在深圳待的不开心,一个人孤身嘛,之前在武汉读的大学,在深圳两年就回来了,结果武汉出这么个事,工资也挺低的相对于深圳来说,也有想法在武汉定居[/quote] 慢慢来吧,现在大环境不好,大家都是在熬。 但只要自身努力,终归会有机会 的。
  • 打赏
  • 举报
回复
引用 6 楼 正怒月神 的回复:
[quote=引用 5 楼 放逐之刃--瑞文 的回复:] 是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了
软件行业,应该还是深圳发达吧。 怎么突然到回武汉了。[/quote] 是啊,我那个时候在深圳待的不开心,一个人孤身嘛,之前在武汉读的大学,在深圳两年就回来了,结果武汉出这么个事,工资也挺低的相对于深圳来说,也有想法在武汉定居
正怒月神 2020-07-21
  • 打赏
  • 举报
回复
引用 5 楼 放逐之刃--瑞文 的回复:
是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了

软件行业,应该还是深圳发达吧。
怎么突然到回武汉了。
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
很久不见的ID啊。 你稍微改一下,我是A表-B表
select * from u1;
select * from u2;

select u1.name,(u1.tid-isnull(u2.tid,0)) as tid from u1
left join u2 on u1.name=u2.name
是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了
正怒月神 2020-07-21
  • 打赏
  • 举报
回复
很久不见的ID啊。 你稍微改一下,我是A表-B表
select * from u1;
select * from u2;

select u1.name,(u1.tid-isnull(u2.tid,0)) as tid from u1
left join u2 on u1.name=u2.name
  • 打赏
  • 举报
回复

	SELECT a.Column1,(ISNULL(b.Num,0)-a.Num) Num FROM dbo.A1 a LEFT JOIN dbo.B1 b ON a.Column1=b.Column1
Bridge_go 2020-07-21
  • 打赏
  • 举报
回复


if object_id(N'tempdb..#temp1',N'U') is not null
   drop table #temp1;
select *  into #temp1 from [A] where 1 <> 1;
declare @Name varchar(10);
declare @CountA int;
declare @CountB int;
declare c1 cursor for select * from [A];
open c1;
fetch next from c1 into @Name, @CountA;
while @@FETCH_STATUS = 0
begin
  set @CountB = 0;
  select @CountB = [Count] from [B] where [Name] = @Name;
  insert into #temp1 values(@Name,@CountA-@CountB);
  fetch next from c1 into @Name, @CountA;
end
close c1;
deallocate c1;
select * from #temp1;
正怒月神 2020-07-21
  • 打赏
  • 举报
回复
引用 9 楼 ManBOyyy 的回复:
[quote=引用 5 楼 放逐之刃--瑞文 的回复:][quote=引用 4 楼 正怒月神 的回复:]很久不见的ID啊。 你稍微改一下,我是A表-B表
select * from u1;
select * from u2;

select u1.name,(u1.tid-isnull(u2.tid,0)) as tid from u1
left join u2 on u1.name=u2.name
是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了[/quote] 你這種方法還是有弊端,比如A表沒有,B表有,應該先全連接tid,然後再匹配才對的[/quote] 这个问题要看,你是什么业务逻辑了。 是以哪张表为基准,还是彼此的差集都要找到。 就一个思路。
threenewbee 2020-07-21
  • 打赏
  • 举报
回复
看看这个 https://www.cnblogs.com/dachie/archive/2010/05/19/1739436.html
ManBOyyy 2020-07-21
  • 打赏
  • 举报
回复
你這種方法還是有弊端,比如A表沒有,B表有,應該先全連接name,然後再匹配才對的[/quote]
ManBOyyy 2020-07-21
  • 打赏
  • 举报
回复
引用 5 楼 放逐之刃--瑞文 的回复:
[quote=引用 4 楼 正怒月神 的回复:]很久不见的ID啊。 你稍微改一下,我是A表-B表
select * from u1;
select * from u2;

select u1.name,(u1.tid-isnull(u2.tid,0)) as tid from u1
left join u2 on u1.name=u2.name
是啊 从深圳回了武汉,什么都不如人意,浑浑噩噩的,很久都没上来过了[/quote] 你這種方法還是有弊端,比如A表沒有,B表有,應該先全連接tid,然後再匹配才對的

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧