我知道如何从不在另一个表中的表中获取记录。但是,这是我无法解决的问题。我有一个视图和一张桌子。一个是使用视图中的行创建的临时表。但是,由于记录操作,我现在缺少记录,有些计数不再匹配。例如,如果我有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)
如果可能,我想包含源名称(视图或临时表)而不是额外的列。这当然是代码的一部分,该代码在程序结束时运行以比较记录计数。
答案 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)