2

3 つのテーブルを結合すると、間違った合計値が取得され続けます。テーブルのERDの写真は次のとおりです。

ここに画像の説明を入力

(オリジナルはこちら: http://dl.dropbox.com/u/18794525/AUG%207%20DUMP%20STAN.png )

クエリは次のとおりです。

select SUM(gpCutBody.actualQty) as cutQty   , SUM(gpSewBody.quantity) as sewQty
from jobOrder
inner join gpCutHead on gpCutHead.joNum = jobOrder.joNum
inner join gpSewHead on gpSewHead.joNum = jobOrder.joNum
inner join gpCutBody on gpCutBody.gpCutID = gpCutHead.gpCutID
inner join gpSewBody on gpSewBody.gpSewID = gpSewHead.gpSewID
4

2 に答える 2

4

すべての注文のカットソーの数量のみに関心がある場合、最も簡単な方法は次のようになります。

select (select SUM(gpCutBody.actualQty) from gpCutBody) as cutQty, 
       (select SUM(gpSewBody.quantity) from gpSewBody) as sewQty

(これは、カットソーには常に関連付けられたジョブ オーダーがあることを前提としています。)

カットソーの内訳をジョブオーダー別に見たい場合は、次のようなものが望ましいかもしれません。

select joNum, SUM(actualQty) as cutQty, SUM(quantity) as sewQty
from (select joNum, actualQty, 0 as quantity
      from gpCutBody
      union all
      select joNum, 0 as actualQty, quantity
      from gpSewBody) sc
group by joNum
于 2012-08-12T10:49:19.997 に答える
3

マークのアプローチは良いものです。ユニオンの前にgroupbyを実行する代わりの方法を提案したいと思います。これは、複数の次元に沿って合計するためのより一般的なアプローチである可能性があるためです。

問題は、合計したい2つの次元があり、結合の値の外積を取得していることです。

select joNum, act.quantity as ActualQty, q.quantity as Quantity
from (select joNum, sum(actualQty) as quantity
      from gpCutBody
      group by joNum
     ) act full outer join
     (select joNum, sum(quantity) as quantity
      from gpSewBody
      group by joNum
     ) q
     on act.joNum = q.joNum

(私は、joNumによってこれを行うことが望ましい出力であるというMarkの仮定を維持しました。)

于 2012-08-12T14:36:55.680 に答える