SQL语句,用于排除符合特定条件的行

我有一张财务费用表,其中包含以下数据:

tx_id    tdl_id     tx_num     detail_type_name     charges     payor_id    orig_payor
73765    737650000  1          CHARGE               320.00      1019        MEDI_CAL
7395     739500000  1          CHARGE               320.00      1253        THIPA/TORRANCE
7444     744400000  1          CHARGE               350.00      NULL        NULL
7444     744410000  1          VOID                 -350.00     NULL        NULL
7498     749800000  1          CHARGE               225.00      1011        UNITED HEALTH
750023   750023000  1          CHARGE               225.00      NULL        NULL
750023   750023100  1          VOID                 -225.00     NULL        NULL

我需要一个排除VOID及其相应CHARGES的查询,换句话说,是一个返回这些记录的sql语句:

tx_id    tdl_id     tx_num     detail_type_name     charges     payor_id    orig_payor
73765    737650000  1          CHARGE               320.00      1019        MEDI_CAL
7395     739500000  1          CHARGE               320.00      1253        THIPA/TORRANCE
7498     749800000  1          CHARGE               225.00      1011        UNITED HEALTH

排除这些记录:

tx_id    tdl_id     tx_num     detail_type_name     charges     payor_id    orig_payor
7444     744400000  1          CHARGE               350.00      NULL        NULL
7444     744410000  1          VOID                 -350.00     NULL        NULL
750023   750023000  1          CHARGE               225.00      NULL        NULL
750023   750023100  1          VOID                 -225.00     NULL        NULL

我首先尝试使用如下语句来比较tdl_id:

 SELECT * FROM tablename
 WHERE LEFT(TDL_ID,4) IN (SELECT LEFT(TDL_ID,4)
               FROM tablename
               GROUP BY LEFT(TDL_ID,4)
               HAVING COUNT(*) < 2) 

但是这并没有成功,因为有些tdl_ids有4个相同的数字,有些是5,有的是6,还有7个.

我的第二个想法是比较2行并查看’detail_type_name’和’charge’,这样我就可以比较两行,如果’CHARGES’是相同的,(一个是负的),一行有’CHARGE’,一个人有’VOID’.但我不确定如何比较两行.我在多个INNER JOINS中使用相同的表(如http://bit.ly/1a70mc2所述),但这并没有给我正确的结果.任何建议或方向非常感谢!

更新:
tx_id,payor_id,orig_payor有时不是NULL,有时不是NULL.

最佳答案 如何在包含VOID和tx_ids相等的任何记录上使用NOT EXISTS?

SELECT * FROM tablename O
WHERE detail_type_name = 'CHARGE'
    AND NOT EXISTS(
        SELECT TOP 1 1 FROM tablename I 
        WHERE I.detail_type_name = 'VOID' 
              AND I.tx_id = O.tx_id
    )
点赞