【发布时间】:2018-09-21 17:17:42
【问题描述】:
我有一个基于事务日期的派生临时表,如下所述:
-----------------------------------------------------------------------------------
|Account_No| Customer_Name | Invoice_No | Amount | Reason_Comment | Trans_Code |
-----------------------------------------------------------------------------------
|12345678 | John Doe | A23782998 | 326.28 | Payment | 2 |
-----------------------------------------------------------------------------------
|12345678 | John Doe | A23782998 | 173.72 | Adjustment | 3 |
-----------------------------------------------------------------------------------
|12345678 | John Doe | A23782998 | 0.00 | Paid In Full | X |
-----------------------------------------------------------------------------------
|23456789 | Bob Marley | B58787934 | 500.00 | Payment | 2 |
-----------------------------------------------------------------------------------
|23456789 | Bob Marley | B58787934 | 0.00 | Paid In Full | X |
-----------------------------------------------------------------------------------
|89034537 | Eric Clapton | C78236428 | 0.00 | Paid In Full | X |
-----------------------------------------------------------------------------------
您可能会注意到,Bob Markey 已付款,他的帐户显示为“已全额付款”。
埃里克克莱普顿很流畅。他较早付款,因此已显示为“已全额付款”
John Doe 在这里需要一些“调整”形式的帮助,以便我们可以将他的帐户余额归零,从而“全额支付”
支付交易的 Trans_Code 为 2,Adjustment 3 并全额支付为 X。
我想排除在 TransCode 中仅具有“已全额支付”原因或 X 的交易。
我试过了:
SELECT *
FROM #temp_table
WHERE Account_No NOT IN
(SELECT Account_No FROM #temp_table
WHERE Reason_Comment = 'Paid In FUll'
AND Reason_Comment <> 'PAYMENT'
AND Reason_Comment <> 'ADJUSTMENT')
也许,我应该使用NOT EXISTS
编辑:
这是我正在使用的表。因为我指定了日期范围,所以某些帐户只有一行,即“全额支付”行,因为调整或付款发生在指定日期范围之前。例如,下表中的最后一行 (Johnson Doe)。我想排除最后一行。
----------------------------------------------------------------------------------------------------------
|Account_No| Customer_Name | Invoice_No | Amount | Trans_No |Reason_Comment | Trans_Date | Trans_Code|
----------------------------------------------------------------------------------------------------------
|12345678 | John Doe | A23782998 | 326.28 |1234567 |Payment | 2018-04-01 | 2|
----------------------------------------------------------------------------------------------------------
|12345678 | John Doe | A23782998 | 687.58 | |Amount Due | | 4|
----------------------------------------------------------------------------------------------------------
|23456789 | Jane Doe | B12378299 | 123.56 |2345678 |Payment | 2018-04-02 | 2|
----------------------------------------------------------------------------------------------------------
|23456789 | Jane Doe | B12378299 | 336.44 |3456789 |Adjustment | 2018-04-03 | 3|
----------------------------------------------------------------------------------------------------------
|23456789 | Jane Doe | B12378299 | | |Paid In Full | | X|
----------------------------------------------------------------------------------------------------------
|34567890 | Jonas Doe | C34567998 | 500.55 |4567891 |Payment | 2018-04-06 | 2|
----------------------------------------------------------------------------------------------------------
|34567890 | Jonas Doe | C34567998 | | |Paid In Full | | X|
----------------------------------------------------------------------------------------------------------
|45678912 | Johnson Doe | D45678756 | | |Paid In Full | | X|
----------------------------------------------------------------------------------------------------------
【问题讨论】:
-
您希望得到什么样的结果?我觉得这个问题不清楚。
-
这具有误导性,请澄清这一点,您要排除仅预付全款的交易吗?因此,您需要的输出是将 Eric Clapton 从记录中排除,因为他在一次付款中较早支付了全部金额,并且没有任何调整或分期付款!那是你要找的吗?请编辑您的帖子并使用给定示例的预期结果添加说明。
标签: sql sql-server not-exists