【问题标题】:SQL Server how to compare 2 tables to extract differences [duplicate]SQL Server如何比较2个表以提取差异[重复]
【发布时间】:2020-04-19 13:30:57
【问题描述】:

在过去 6 个月中,我们一直在错误地插入交易付款。 我们需要插入细分的付款,但在某些情况下,我们一直在插入对它们进行汇总的付款。

如何错误地插入一些付款:

同一笔交易应如何插入付款:

到目前为止,我为识别不正确的付款所做的是运行不正确的查询并检索从 2019 年 12 月 1 日开始的所有记录,然后保存这些记录临时表中的记录。

使用不正确的表查询:

SELECT DISTINCT
    CAST(P.ExternalId AS CHAR(25)) AS 'transID'
,   CASE RTP.Activity 
        WHEN 0 THEN 'Payment' 
        WHEN 1 THEN 'Void' 
    END AS 'transType'
,   P.TransactionCreateDate AS 'createdDate'
,   P.Amount AS 'paymentAmount'             <<< Payment column was being retrieved from wrong table.
,   P.EffectiveDate AS 'paymentDate'
,   CAST(P.Id AS NVARCHAR(50)) AS 'payment_Id'
,   P.TransactionBatchId AS 'batchId'
,   T.TenderTypeId AS 'TenderType'
,   CAST(TType.Name AS CHAR(10)) AS 'PaymentType'
FROM 
    Payments P
INNER JOIN dbo.Tenders T
    ON T.TransactionId = P.TransactionId
INNER JOIN dbo.TenderTypes TType
    ON TType.Id = T.TenderTypeId
WHERE 
    CAST(P.TransactionCreateDate AS DATE) >= '12/01/2019'
ORDER BY 
    createdDate DESC

然后我对查询进行更正,以检索从 2019 年 12 月 1 日开始但这次获得细分付款的所有交易,并将它们放入第二个临时表中。差异是 955 条记录。

使用正确的表格查询支付金额:

SELECT DISTINCT
    CAST(P.ExternalId AS CHAR(25)) AS 'transID'
,   CASE RTP.Activity 
        WHEN 0 THEN 'Payment' 
        WHEN 1 THEN 'Void' 
    END AS 'transType'
,   P.TransactionCreateDate AS 'createdDate'
,   T.Amount AS 'paymentAmount'
,   P.EffectiveDate AS 'paymentDate'
,   CAST(P.Id AS NVARCHAR(50)) AS 'payment_Id'
,   P.TransactionBatchId AS 'batchId'
,   T.TenderTypeId AS 'TenderType'
,   CAST(TType.Name AS CHAR(10)) AS 'PaymentType'
FROM 
    Payments P
INNER JOIN dbo.Tenders T
    ON T.TransactionId = P.TransactionId
INNER JOIN dbo.TenderTypes TType
    ON TType.Id = T.TenderTypeId
WHERE 
    CAST(P.TransactionCreateDate AS DATE) >= '12/01/2019'
ORDER BY 
    createdDate DESC

我的问题是我现在如何比较每个表的内容,以提取需要更正的内容?我相信这并不难,我只是不知所措,无法弄清楚,想知道是否有人可以提供帮助。

非常感谢。

【问题讨论】:

标签: sql sql-server stored-procedures


【解决方案1】:

EXCEPT 操作员会解决您的问题吗?

SELECT A.a, A.b, ... 
FROM Table A  
EXCEPT  
SELECT B.a, B.b, ... 
FROM Table B;  

文档在这里:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql?view=sql-server-ver15

【讨论】:

  • 让我试一试,看看结果。一旦找到差异,我将更正数据。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2011-12-17
  • 2017-09-30
  • 2010-11-27
  • 1970-01-01
相关资源
最近更新 更多