从计数不匹配的两个表中获取记录和计数

时间:2017-01-11 17:09:07

标签: sql-server

我知道如何从不在另一个表中的表中获取记录。但是,这是我无法解决的问题。我有一个视图和一张桌子。一个是使用视图中的行创建的临时表。但是,由于记录操作,我现在缺少记录,有些计数不再匹配。例如,如果我有20个原始SSN,我现在有17个或在temp中说24个记录,所有都应该匹配。

没有太多这样的事情发生,但有成千上万的记录,并且手动完成它们太繁琐了。

有没有办法获取记录并统计计数不匹配的位置?结果可以包括每个表的计数和表名吗?

这就是我所拥有的:

Select vw.UPC as [View], COUNT(vw.UPC) as [view Amount], tb.UPC as [Temp], COUNT(tb.UPC) as [temp Amount]
From #tbTransfOUT tb
JOIN vwTrans vw
ON tb.UPC = vw.UPC
Where vw.UPC NOT IN (Select vw2.UPC
                    From vwTrans  vw2
                    JOIN #tbTransfOUT tb2
                    ON tb2.UPC = vw2.UPC
                    WHERE (Select COUNT(UPC) From #tbTransfOUT Group By UPC) =
                           (Select COUNT(UPC) From vwTrans  Group By UPC)
Group By vw.UPC
Order By vw.UPC, COUNT(vw.UPC), tb.UPC, COUNT(tb.UPC)

如果可能,我想包含源名称(视图或临时表)而不是额外的列。这当然是代码的一部分,该代码在程序结束时运行以比较记录计数。

1 个答案:

答案 0 :(得分:1)

我相信以下内容应该有效。您可以单独测试每个CTE。完整外连接查找其中一个表中没有给定UPC记录的情况

WITH VWCount (UPC, VWCount)
as
(SELECT UPC, COUNT(*) FROM vwTrans
  GROUP BY UPC),
TMPCount (UPC, TMPCount) AS
(SELECT UPC, COUNT(*) FROM #tbTransFout 
 GROUP BY UPC)

SELECT vw.UPC, vw.VWCount, tmp.UPC,  tmp.TMPCount
  FROM VWCount vw
  FULL OUTER JOIN TMPCount tmp
  ON vw.UPC = tmp.UPC
  WHERE COALESCE(vw.VWCount,0) <> COALESCE(tmp.TMPCount,0)