0

Iseries 上の DB2 データベースに対する複雑な SQL クエリがあります。ヘルプのためにシナリオを単純化します。

更新 2013 年 10 月 23 日午後 10 時 54 分:

わかりました私は私の問題を説明します...顧客コードのすべての動きと金額を含む「製品」という名前のテーブルがあると想像してください...例:

**Product** table


CUSTOMER_CODE | PRODUCT_CODE | DATE_MOVEMENT | QTA_MOVEMENT | AMOUNT
______________________________________________________________________
 C0001        | BOOK         | 20133101      | 400          | 60
 C0001        | BOOK         | 20131231      | 40           | 30
 C0001        | BOOK         | 20130701      | 1            | 6
 C0001        | BOOK         | 20130310      | 4            | 15
 C0002        | BOOK2        | 20131210      | 4            | 15
 C0002        | BOOK2        | 20131110      | 4            | 18
 C0002        | BOOK2        | 20131230      | 42           | 130
 C0002        | BOOK2        | 20130610      | 42           | 140

QTA_MOVEMENT と AMOUNT COLUMN の ANY CUSTOMER の PRODUCT_CODE の SUM を提供する SQL クエリを作成する必要があります....そして... 同時に、任意の ROW の LAST QTA_MOVEMENT、LAST AMOUNT、LAST DATE MOVEMENT を出力します (customer_code + product_code + 年)。結果のクエリは次のとおりです。

**Product** table

C_CODE | PRODUCT_CODE | YEAR | T_QTA | T_AMOUNT | L_DATE  | L_QTA_MOV | L_AMOUNT|
_________________________________________________________________________________
C0001  | BOOK         | 2013 | 445   | 111      |20131231 | 40        | 30
C0002  | BOOK2        | 2013 | 92    | 303      |20131230 | 42        | 130

この例で問題を単純化しました...

必要な SQL クエリについて何か提案はありますか?

4

2 に答える 2

0

正直なところ、あなたのクエリはめちゃくちゃです。クエリを見ただけでは、実際の目標が何であるかを見つけるのは困難です。

まず、一時テーブルをできるだけ作成しないようにします。を使用する代わりに from ステートメントにテーブルを直接配置できないのはなぜ(select ... from ... where) as table_aliasですか? 100% 確実ではありませんが、クエリ オプティマイザーはこれらのステートメントを最適化できないと思います。

クエリでは、TOT と LASTM を結合します。ただし、LASTM で 1 行を作成するには TOT が必要です。LASTMに早く参加しませんか?何をしようとしているのかを説明すると、誰かがクエリの書き直しを手伝ってくれるので助かります。

最後に。同じテーブル (TABLEORIG) をそれ自体と結合しているようです。これは、テーブルの設計があまり役に立たないという疑いを残しています。テーブルのデザインを変更するオプションがあるかどうかはわかりません。

于 2013-10-23T18:32:55.317 に答える