2016-05-31 8 views
-1

私はこれらの2つのテーブルを持っています。 item_tblで金額を取得しようとしていますが、payment_dtは別のテーブルにあります(payment_tbl)。SQL重複なしで2つのテーブルを結合する方法

2つのテーブルを結合して金額を正しく取得するにはどうすればよいですか?現在、私のSQL(PostgreSQLを使用)は3行を生成するので、合計を取得すると3倍になります。

item_tbl

receipt_no | gross_amount | other_discount_amount | net_of_discount_amount 
0000000617 |  2000.00 |    400.00 |    1600.00 

payment_tbl:

receipt_no | amount(net) | payment_method | payment_dt 
0000000617 |  639.49 | cash   | 2016-05-31 11:48:23.5+08 
0000000617 |  500.00 | check   | 2016-05-31 11:48:23.5+08 
0000000617 |  500.00 | debit card  | 2016-05-31 11:48:23.5+08 

期待結果

gross_amount | other_discount_amount | net_of_discount_amount 
2000.00  |    400.00 |    1600.00 

クエリ:

SELECT 
    cashier.cashier_name, 
    COALESCE(gross_amount, 0) AS gross_amount, 
    (CASE WHEN item.other_discount_type = 'OTHER' THEN COALESCE(item.other_discount_amount, 0) ELSE 0 END) AS other_discount_amount, 
    COALESCE(item.net_of_discount_amount, 0) AS net_of_discount_amount 
FROM 
    item_tbl item 
INNER JOIN 
    payment_tbl payment ON item.receipt_no = payment.receipt_no 
LEFT JOIN 
    cashier_tbl cashier ON cashier.id = item.cashier_id 
WHERE 
    date(payment.payment_dt) = to_date('31 May 2016', 'dd Mon YYYY') 
+4

どのくらいの金額が必要ですか?期待している結果を追加してください – Jens

+1

どのDBMSをお使いですか?無関係ですが、to_date('2011年5月31日 '、'月曜日YYYY ')を使用した変換は、現在の環境に依存します。例えば、私のコンピュータで失敗します。言語に依存しない日付の値を使用する必要があります(例: '31-05-2016' –

+0

構文エラーです。 (ヒント:where句。) – jarlh

答えて

0

特定の領収書の支払い記録には、これが正しく機能するためには同じ日付時間が必要です。

SELECT 
    cashier.cashier_name, 
    COALESCE(gross_amount, 0) AS gross_amount, 
    (CASE WHEN item.other_discount_type = 'PATRONAGE_CASH' THEN COALESCE(item.other_discount_amount, 0) ELSE 0 END) AS other_discount_amount, 
    COALESCE(item.net_of_discount_amount, 0) AS net_of_discount_amount 
FROM item_tbl item 
    INNER JOIN (Select receipt_no, Max(payment_dt) payment_dt from payment_tbl Group By receipt_no) payment ON item.receipt_no = payment.receipt_no 
    LEFT JOIN cashier_tbl cashier ON cashier.id = item.cashier_id 
WHERE 
    AND date(payment.payment_dt) = to_date('31 May 2016', 'dd Mon YYYY') 
関連する問題