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