4

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

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_id 有 4 个相同的数字,一些 5、一些 6 和一些 7。

我的第二个想法是比较两行并查看'detail_type_name'和'charges',这样我会比较两行,如果'CHARGES'相同(一个负数),并且一行有'CHARGE'和一个有“无效”。但我不确定如何比较两行。我在多个 INNER JOINS 中使用同一张表进行绑定(如此处所述http://bit.ly/1a70mc2),但这并没有给我正确的结果。非常感谢任何建议或方向!

更新: tx_id、payor_id、orig_payor 有时不为 NULL,有时也不为 NULL。

4

2 回答 2

2

在任何包含 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
    )
于 2013-09-19T15:09:41.310 回答
0

我认为最安全的选择是:

select tx_id, sum(Charges) from tablename 
group by tx_id
having sum(charges)>0

这样,如果您取消了一半的费用,它就会显示出来,任何检查交易是否存在无效的东西都会排除那些不应该的交易

于 2013-09-19T15:16:07.413 回答