我有两个查询,每个查询都给我订单列表和每个订单上的行项目数。 我们正在迁移系统,一个来自源,另一个来自目标。 我需要在它们之间做一些验证。
我想比较它们,以便我的结果是行数不匹配的订单列表。 如果订单应该在目标中,但不是,它也应该出现在列表中。
我已经为此斗争了一整天,我无法思考如何接近它。
帮助将不胜感激!
下面是两个查询:
源查询
select s.oNum, count(s.oNum)
from SourceTbl s
left join PK_Master pk
on pk.Num = s.oNum
where s.oNum not in (select ordernum from tmpSalesOrders)
group by s.oNum
order by s.oNum
目标查询
select p.oNum, count(p.oNum)
from BridgeTbl p
left join TargetTbl t
on p.ToNum = t.orderID
group by p.oNum
order by p.oNum
SourceTable 是一个超集,PK_Master 和 tmpSalesOrders 用于优化应迁移的订单。
BridgeTbl有一个名为SoNum的字段,= s.oNum来链接源和目标。
我需要结果集中的源订单号 (s.oNum(。
这两个查询之间折腾EXCEPT
,让'er撕裂。这将告诉您第一个查询输出的记录不在第二个查询中。
select s.oNum, count(s.oNum)
from SourceTbl s
left join PK_Master pk
on pk.Num = s.oNum
where s.oNum not in (select ordernum from tmpSalesOrders)
group by s.oNum
order by s.oNum
EXCEPT
select p.oNum, count(p.oNum)
from BridgeTbl p
left join TargetTbl t
on p.ToNum = t.orderID
group by p.oNum
order by p.oNum
EXCEPT
是"集合运算符"。在 TSQL 中,你可以UNION
、UNION ALL
、EXCEPT
和INTERSECT
集合。