質問

私は両方の列[プロジェクト]と[値]を有する2つのテーブルAP及びINVを有している。

私はこのような何かを返すために、クエリを望んます:

プロジェクト| SUM_AP | SUM_INV

私は以下のコードを思い付いたが、それは(合計が間違っている)間違った結果を返すいます。

SELECT AP.[PROJECT],
SUM(AP.Value) AS SUM_AP, 
SUM(INV.Value) AS SUM_INV
FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT])
WHERE AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]
役に立ちましたか?

解決

あなたのクエリからの結果は、あなたが要約しようとしている値はSUMに含まれる重複した値を引き起こす、グループ化されているので、間違っています。

あなたは、サブセレクトのカップルとそれを解決することができます:

SELECT 
    AP1.[PROJECT],
    (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP,
    (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV
FROM AP AS AP1 
    INNER JOIN INV AS INV1 
        ON (AP1.[PROJECT] =INV1.[PROJECT])
WHERE AP1.[PROJECT] = 'XXXXX'
GROUP BY AP1.[PROJECT]

他のヒント

あなたがそのIDとINVにN与えられたプロジェクトIDを持つAP内の行、およびM行を持っている場合は、同じので

、その後、プロジェクトIDの2つのテーブル間の結合は、そのプロジェクトのN*M行の合計を持っていますAPの行は、すべてのそのプロジェクトのIDを有しているINVの行、およびその逆のために繰り返されます。したがって、なぜあなたのカウントは、最も可能性の高いオフになっている(それは参加から与えられたテーブル内の繰り返しによる複数回、同じ行をカウントだから)。

その代わり、次の2つのサブクエリ、プロジェクトIDずつのグループ最初の表の結果とその総和ことを行い、第二のプロジェクトIDによってグループ他のテーブル間の結合をやってみたいし、その合計を行いかもしれません - 。その後、参加一度のみ、各プロジェクトIDの合計で1行を持っている。

プロジェクトは、親テーブルの場合は、

は、次の2つの子テーブルに参加するプロジェクトテーブルから選択し、左の外側を行う必要があります:

SELECT PROJECT.PROJECT_ID, SUM(AP.Value) AS SUM_AP, SUM(INV.Value) AS SUM_INV
FROM PROJECT
LEFT OUTER JOIN AP ON (AP.[PROJECT] = PROJECT.[PROJECT_ID])
LEFT OUTER JOIN INV ON (INV.[PROJECT] = PROJECT.[PROJECT_ID])
WHERE PROJECT.[PROJECT_ID] = 'XXXXX'
GROUP BY PROJECT.[PROJECT_ID]

次の2つの和の計算を分離できます。私は考えることができる一つの方法は次のように、サブクエリに在庫計算を移動することです。

SELECT 
    AP.[PROJECT]
,   SUM(AP.Value) AS SUM_AP
,   SummedInv as SUM_INV
FROM AP
LEFT JOIN (
    SELECT PROJECT, SUM(Value) AS SUM_INV
    FROM INV
    GROUP BY PROJECT
) SummedInv ON SummedInv.Project = AP.Project
GROUP BY AP.PROJECT, SummedInv.SUM_INV

SummedInvのサブクエリがprojectにグループ化されているので、それは同様外部クエリでSummedInv.SUM_INV上のグループに安全です。

どのようにこのクエリについて:

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


where jobOrder.joNum = '36'
ます。http://

ここERDへのリンクですdl.dropbox.com/u/18794525/AUG%207%20DUMP%20STAN.pngする

試します:

SELECT AP.[PROJECT] AS PROJECT, SUM(AP.[Value]) AS SUM_AP, SUM(INV.[Value]) AS SUM_INV
FROM AP, INV
WHERE AP.[PROJECT] = INV.[PROJECT]
AND AP.[PROJECT] = 'XXXXX'
GROUP BY AP.[PROJECT]
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top