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
A
答えて
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
また、テーブルエイリアスを使用することで、長期的にはより簡単に役割を果たすことができます。
は、私はあなたがあなたが、あなたが使用している一時テーブルロジックが必要であるかどうかを自問しようとしているものを再検討する必要があると思います。私にとって、あなたのデータはこれから完全に混乱するように見えます。必要なデータを取得するために各セクションがサブセレクションになるように、これをすべて1つのクエリーに入れることができるかどうかを検討してください。
http://www.techrepublic.com/article/use-sql-subselects-to-consolidate-queries/
関連する問題
- 1. ストアドプロシージャの実行に時間がかかります
- 2. SQLストアドプロシージャを実行するには時間がかかりますが、レコードを増やすには時間がかかります。
- 3. なぜこのMATLABスクリプトは実行に時間がかかりますか?
- 4. LINQPadは実行に時間がかかりますか?
- 5. IPhone IOS:PHPスクリプトの実行に時間がかかりますか?
- 6. ExcelのOracleクエリー実行に時間がかかります
- 7. Sendmail()の実行に時間がかかります
- 8. SQLの実行に時間がかかります
- 9. Javaデスクトップアプリケーションの実行に時間がかかります
- 10. シンプルセレクトの実行に時間がかかります
- 11. Wordpress MySQLクエリの実行に時間がかかります
- 12. プログラムの実行に時間がかかります
- 13. SQLスクリプトの実行に時間がかかります
- 14. クエリの実行に時間がかかります
- 15. Access 2010 SQLサブクエリの実行に時間がかかります
- 16. mysqlクエリの実行に時間がかかります
- 17. ob_flushの実行に時間がかかります
- 18. np.dot実行に非常に時間がかかります
- 19. アクターメソッドの実行時間には制限がありますか?
- 20. Golang - go実行に時間がかかります
- 21. クエリ実行に時間がかかります
- 22. readOGR {rgdal}実行に時間がかかります
- 23. なぜtablle変数ストアドプロシージャがtempテーブルストアドプロシージャよりも実行時間がかかります
- 24. なぜpopToRootViewContollerがフリーズしたり、実行に時間がかかりますか?
- 25. 再帰関数の実行時間がかかります
- 26. SQL結合のどのテーブルが実行に時間がかかりますか?
- 27. 実行時間このアルゴリズムの実行時間は何ですか
- 28. ストアドプロシージャの実行時間は、正しい
- 29. スパークUdfを実行する時間がかかります
- 30. SQL INNERの実行に時間がかかりすぎる
[悪い習慣をキックする:使用して古いスタイルな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年前**)、その使用はお勧めしません。 –
ここでは無駄な作業をたくさん行っています。なぜこれらの一時テーブルを作成してすぐに削除したらいいですか?いくつかのサンプルデータと期待される出力も提供してください。 –
'JOIN'述部がない最後の' SELECT' ...なぜですか? – Devart