|
▼mayu さん:
解答ありがとうございました
まだまだアクセスが勉強不足の為、
解読中です
また、どうしてもわからないところがあったら質問してもいいでしょうか?
これを参考に、勉強してみます
ありがとうございました
>こんばんは。
>
>亀レスですけど
>SQLで総計計算をおこなう方法をご紹介しますね。
>
>ただ、データが10万件ということなので
>複雑なクエリになると遅くて実用に耐えない可能性が高いため、
>簡単なUPDATE文の発行で済むように 設計で工夫します。
>
>まずは更新対象のテーブルを
>
>CREATE TABLE tbl (
> grp_num INT
> , sub_num INT
> , 品番 VARCHAR( 10 )
> , 数 INT
> , concat VARCHAR( 255 )
> , total INT
> , CONSTRAINT pk_tbl PRIMARY KEY ( grp_num, sub_num )
>) ;
>
>↑のようなフィールド構成にします。
>
>
>■データ例
>
> grp_num sub_num 品番 数 concat total
>-------------------------------------------
> 1 1 A 2 Null Null
> 1 2 B 2 Null Null
> 1 3 C 3 Null Null
> 2 1 D 1 Null Null
> 2 2 E 2 Null Null
> 2 3 F 2 Null Null
> 3 1 A 3 Null Null
> 3 2 B 3 Null Null
> 3 3 W 3 Null Null
>
>ポイントとしては、3つ。
>
>★1つ目
> 同じ品番が繰り返し出てくるようなので
> グループキーを作ること。
> ( 上記例では grp_num が該当 )
>
>★2つ目
> 同グループの中で抜けの無い連番を振ること。
> いわゆる枝番ですね。
> ( 上記例では sub_num が該当 )
>
>★3つ目
> 品番を | で結合した キー項目
> 及び
> 数を掛け合わせる 総計
> のフィールドは初期値を Null にしておきます。
> ( 上記例では concat と total が該当 )
>
># YU-TANGさん、雅さん、247bさんと
># 発言がカブッてる点はご容赦下さいね。(^_^A;;
>
>
>■SQL
>-------------------------------------------------------------------------------
>
>UPDATE tbl T1
>LEFT JOIN tbl T2
> ON T1.grp_num = T2.grp_num And
> T1.sub_num = T2.sub_num + 1
>SET T1.total = IIf( T2.grp_num Is Null, T1.数, T2.total * T1.数 )
> , T1.concat = IIf( T2.grp_num Is Null, T1.品番, T2.concat & '|' & T1.品番 ) ;
>
>-------------------------------------------------------------------------------
>
>
>■結果
>
> grp_num sub_num 品番 数 concat total
>-------------------------------------------
> 1 1 A 2 A 2
> 1 2 B 2 A|B 4
> 1 3 C 3 A|B|C 12
> 2 1 D 1 D 1
> 2 2 E 2 D|E 2
> 2 3 F 2 D|E|F 4
> 3 1 A 3 A 3
> 3 2 B 3 A|B 9
> 3 3 W 3 A|B|W 27
>
>以下、おまけ。
>
>外部結合 は 内部結合 に比べて
>パフォーマンスがめちゃんこ悪いので
>先のSQLで 更新速度 が遅すぎる場合は
>UPDATE文を2回に分けて発行します。
>
>▼1回目
>------------------------------
>
>UPDATE tbl
>SET concat = 品番, total = 数
>WHERE sub_num = 1 ;
>
>------------------------------
>▼2回目
>--------------------------------------------
>
>UPDATE tbl T1
>INNER JOIN tbl T2
> ON T1.grp_num = T2.grp_num And
> T1.sub_num = T2.sub_num + 1
>SET T1.total = T2.total * T1.数
> , T1.concat = T2.concat & '|' & T1.品番 ;
>
>--------------------------------------------
>
> では ☆
|
|