我有2个表AP和INV,两者有列[PROJECT]和[值]。

我要查询返回的东西是这样的:

PROJECT | 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]

其他提示

如果您在AP N行与给定的项目ID,并M排在INV与ID,那么该项目ID两个表之间的连接将有一个总N*M行该项目的,因为同行AP将重复在INV每一行有该项目的ID,反之亦然。因此,为什么你的计数是最有可能关闭(因为它是多次因重复计数同一行中给定的表从加入)。

相反,你可能会想尝试做两个子查询,按项目ID其中一个组的第一个表的结果之间的连接并执行它的总和,其中第二组由项目ID的其他表,这是否总和 - 然后加入一旦你只有1行与总和为每个项目ID

如果项目是父表,你应该从项目表,并做了左外连接的两个子表:

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]

您可以将二者分开总和计算。我能想到的一种方法是在库存计算移动到子查询,如:

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'

这里是链接到ERD: HTTP:// 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