2009-07-03 7 views
0

私は行データ(プライマリキーなし)を持つ1つのテーブルを持っています。主キーを持つ別のもの。複雑な挿入からストアドプロシージャ

行データテーブルでは、私は3つの直径で複数のレコードを持っています。他の10フィールドは、これら3つのパラメータのすべてのレコードの同じ値を持ちます。

例:

aa bb cc dd ee ff gg hh ii p1 p2 p3   V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 5 2 3 4 
a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 10 1 4 4 
私は私のテーブルに挿入する

のようなものです

aa bb cc dd ee ff gg hh ii p1 p2 p3   V1 V2 V3 V4 

a1 b1 c1 d1 e1 f1 g1 h1 i1 zz 123 03-05-2009 15 3 7 8 

列で一つだけのレコード・グループP1、P2、P3 ...

いずれかはどのように私を提案することができます書き込みSPこのの??

私は列p1、p2、p3で1つのカーソルを定義しました。

まず、これらのタイプのレコードがマスターに存在するかどうかを確認しますか?プライマリキーは、これらの直径に基づいています。

次に、gorupでクエリを書いています...

しかし、それは正しい方法ですか?ここには、カーソル、友人 -

答えて

0

オイ..事前に

感謝を案内してください。必要はありません。これを試してみてください:

INSERT MyDetailTable (aa, bb, cc, dd, ee, ff, gg, hh, ii, p1, p2, p3, V1, V2, V3, V4) 
SELECT d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3, SUM(d.V1), SUM(d.V2), SUM(d.V3), SUM(d.V4) 
FROM MyDetailTable d 
JOIN MyMasterTable m ON d.p1 = m.p1 
    AND d.p2 = m.p2 
    AND d.p3 = m.p3 
GROUP BY d.aa, d.bb, d.cc, d.dd, d.ee, d.ff, d.gg, d.hh, d.ii, d.p1, d.p2, d.p3 

ザ・だけであなたはこれが事実であることを保証するために、外部キー制約を使用する必要がありますが、PKは、(マスターテーブルに存在することを確認するために存在して登録しよう - そう、あなたがチェックする必要はありません。詳細テーブルに対して実行するすべてのステートメントにマスターレコードが存在することを確認してください)。 グループ化は、各行の「共通」フィールドによってグループ化されます。 aa、bb、cc ..... p1、p2、p3でグループ化するのではなく、p1、p2、p3でグループ化してMAX(aa)、MAX(bb)などを使用できます。本当にあなた次第です。

関連する問題