我有一个财务费用表,其中包含如下数据:
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。