我有一张财务费用表,其中包含以下数据:
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。
答案 0 :(得分:2)
如何在包含VOID且tx_id
s相等的任何记录上使用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
)
答案 1 :(得分:0)
我认为最安全的选择是:
select tx_id, sum(Charges) from tablename
group by tx_id
having sum(charges)>0
这样,如果你取消了一半的费用,它会显示,任何检查交易是否存在空白的东西都会排除那些不应该
的费用。