2016-05-31 24 views
-2
DECLARE @run_date DATETIME 

SELECT @run_date = '2016/05/30' 

SELECT PAYMENT_LINE.active, 
     PAYMENT_LINE.alloc_date, 
     PAYMENT_LINE.allocation_ind, 
     PAYMENT_LINE.amount, 
     PAYMENT_LINE.fund_charge_id, 
     PAYMENT_LINE.paid_td, 
     PAYMENT_LINE.payment_id, 
     PAYMENT_LINE.payment_line_id, 
     PAYMENT_LINE.payment_type_code, 
     PAYMENT_LINE.period, 
     PAYMENT_LINE.reference_id, 
     PAYMENT_LINE.reversal_date, 
     PAYMENT_LINE.src_id 

     INTO #pym 
FROM PAYMENT_LINE 
WHERE alloc_date IS NOT NULL 
     AND alloc_date < @run_date 

/*DELETE FROM #pym WHERE reversal_date IS NULL*/ 



DELETE 
FROM #pym 
WHERE reversal_date > @run_date 



SELECT payment_id, 
     Total = SUM(amount) 

     INTO #pym1 
FROM #pym 
GROUP BY 
     payment_id 



SELECT PAYMENT.payment_id, 
     PAYMENT.payment_amount, 
     Total 

     INTO #pym2 
FROM #pym1, 
     PAYMENT 
WHERE PAYMENT.payment_id = #pym1.payment_id 
GROUP BY 
     PAYMENT.payment_id 
HAVING Total > PAYMENT.payment_amount 



SELECT MANUFACTURER.manufacturer_id, 
     MANUFACTURER.manufacturer_name, 
     alloc_date, 
     PAYMENT.payment_id, 
     PAYMENT.payment_amount, 
     Total 

     INTO #pym3 
FROM #pym2, 
     PAYMENT, 
     MANUFACTURER, 
     PAYMENT_LINE 
WHERE Total > PAYMENT.payment_amount 



SELECT payment_id, 
     Total_payment = SUM(payment_amount - Total) 

     INTO #pym4 
FROM #pym3 
GROUP BY 
     payment_id 



SELECT MANUFACTURER.manufacturer_id, 
     MANUFACTURER.manufacturer_name, 
     alloc_date, 
     PAYMENT.payment_id, 
     PAYMENT.payment_amount, 
     Total, 
     Total_payment 
FROM #pym4, 
     #pym2, 
     PAYMENT, 
     MANUFACTURER, 
     PAYMENT_LINE 
+2

[悪い習慣をキックする:使用して古いスタイルなJOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using -old-style-joins.aspx) - 古い形式の*カンマで区切られたテーブルのリスト*スタイルは、ANSI - ** 92 ** SQL標準(** more)の*適切な* ANSI 'JOIN'構文で置き換えられました20年前**)、その使用はお勧めしません。 –

+0

ここでは無駄な作業をたくさん行っています。なぜこれらの一時テーブルを作成してすぐに削除したらいいですか?いくつかのサンプルデータと期待される出力も提供してください。 –

+0

'JOIN'述部がない最後の' SELECT' ...なぜですか? – Devart

答えて

1

私はこのクエリを見てきましたが、それ以上の情報がなければ意味をなさないことになります。最初の3つのクエリ。

SELECT PAYMENT_LINE.active, 
    PAYMENT_LINE.alloc_date, 
    PAYMENT_LINE.allocation_ind, 
    PAYMENT_LINE.amount, 
    PAYMENT_LINE.fund_charge_id, 
    PAYMENT_LINE.paid_td, 
    PAYMENT_LINE.payment_id, 
    PAYMENT_LINE.payment_line_id, 
    PAYMENT_LINE.payment_type_code, 
    PAYMENT_LINE.period, 
    PAYMENT_LINE.reference_id, 
    PAYMENT_LINE.reversal_date, 
    PAYMENT_LINE.src_id 

    INTO #pym 
FROM PAYMENT_LINE 
WHERE alloc_date IS NOT NULL 
    AND alloc_date < @run_date 

DELETE 
FROM #pym 
WHERE reversal_date > @run_date 



SELECT payment_id, 
    Total = SUM(amount) 

    INTO #pym1 
FROM #pym 
GROUP BY 
    payment_id 

すべてこれに組み合わせることができます。

SELECT payment_id, 
     Total = SUM(amount) 
     INTO #pym 
FROM PAYMENT_LINE 
WHERE alloc_date IS NOT NULL 
     AND alloc_date < @run_date 
     AND reversal_date <= @run_date 
GROUP BY payment_id 

本当に正しい構文で読んでいる必要があります。本当に古い構文を使用しています。

SELECT PAYMENT.payment_id, 
    PAYMENT.payment_amount, 
    Total 

    INTO #pym2 
FROM #pym1, 
    PAYMENT 
WHERE PAYMENT.payment_id = #pym1.payment_id 
GROUP BY 
    PAYMENT.payment_id 
HAVING Total > PAYMENT.payment_amount 

あなたはまた、デカルトに注意を払う必要があり、ここでアーロンBertrandsの記事http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx

をお読みください参加すると、彼らは、最終的なクエリは多くの方法で台無しにしてデータを起こっている伴うものを。

SELECT MANUFACTURER.manufacturer_id, 
    MANUFACTURER.manufacturer_name, 
    alloc_date, 
    PAYMENT.payment_id, 
    PAYMENT.payment_amount, 
    Total, 
    Total_payment 
FROM #pym4, 
    #pym2, 
    PAYMENT, 
    MANUFACTURER, 
    PAYMENT_LINE 

また、テーブルエイリアスを使用することで、長期的にはより簡単に役割を果たすことができます。

When to use SQL Table Alias

は、私はあなたがあなたが、あなたが使用している一時テーブルロジックが必要であるかどうかを自問しようとしているものを再検討する必要があると思います。私にとって、あなたのデータはこれから完全に混乱するように見えます。必要なデータを取得するために各セクションがサブセレクションになるように、これをすべて1つのクエリーに入れることができるかどうかを検討してください。

http://www.techrepublic.com/article/use-sql-subselects-to-consolidate-queries/

関連する問題