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 があるため、うまくいきませんでした。

私の 2 番目のアイデアは、2 つの行を比較して「detail_type_name」と「料金」を確認することでした。これにより、2 つの行を比較し、「CHARGES」が同じで (1 つがマイナス)、1 つの行に「CHARGE」があり、 1つは「VOID」です。しかし、2 つの行を比較する方法がわかりません。複数の 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 に答える