Microsoft SQL Server:需要比较两组结果

时间:2019-03-28 19:02:42

标签: sql sql-server select count

我有两个查询,每个查询都为我提供订单列表以及每个订单上的订单项数量。我们正在迁移系统,一个来自源,另一个来自目标。我需要在它们之间进行一些验证。

我想比较它们,以便我的结果是行数不匹配的订单列表。如果订单应该在目标中但不在目标中,那么它也应该出现在列表中。

我已经为此奋斗了整整一整天,我无法解决这个问题。

我们将不胜感激!

这是两个查询:

源查询

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)。

1 个答案:

答案 0 :(得分:2)

在这两个查询之间折腾EXCEPT,让我们撕裂。这样可以告诉您第一个查询输出的记录却不在第二个查询中。

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 ALLEXCEPT, and INTERSECT集。