2016-09-29 133 views
1
SELECT DISTINCT [SC Vermorel SRL$Production Order].No_, 
       [SC Vermorel SRL$Production Order].[Replan Ref_ No_], 
       [SC Vermorel SRL$Production Order].Description, 
       [SC Vermorel SRL$Production Order].[Source No_], 
       [SC Vermorel SRL$Production Order].[Routing No_], 
       [SC Vermorel SRL$Production Order].Quantity, 
       [SC Vermorel SRL$Production Order].[Old Prod_ Order No_], 
       [SC Vermorel SRL$Routing Line].[Run Time], 
       [SC Vermorel SRL$Routing Line].[Run Time] * [SC Vermorel SRL$Production Order].Quantity AS TotalOre, 
       [SC Vermorel SRL$Prod_ Order Line].[Finished Quantity], 
       SUM([SC Vermorel SRL$ProductieZilnica].[Cantitate sudura]) AS [Cantitate sudura], 
       SUM([SC Vermorel SRL$ProductieZilnica].[Cantitate montaj]) AS [Cantitate montaj] 
FROM [SC Vermorel SRL$Production Order] 
INNER JOIN [SC Vermorel SRL$Routing Line] 
    ON [SC Vermorel SRL$Production Order].[Routing No_] = [SC Vermorel SRL$Routing Line].[Routing No_] 
INNER JOIN [SC Vermorel SRL$Prod_ Order Line] 
    ON [SC Vermorel SRL$Production Order].No_ = [SC Vermorel SRL$Prod_ Order Line].[Prod_ Order No_] 
INNER JOIN [SC Vermorel SRL$ProductieZilnica] 
    ON [SC Vermorel SRL$Production Order].No_ = [SC Vermorel SRL$ProductieZilnica].RPO 
WHERE ([SC Vermorel SRL$Production Order].Status = 3) 
     AND ([SC Vermorel SRL$Production Order].[Location Code] = 'MACH FIN') 
     AND ([SC Vermorel SRL$Production Order].[Gen_ Prod_ Posting Group] = 'FINISHED G') 
     AND ([SC Vermorel SRL$Routing Line].No_ = '150') 
GROUP BY [SC Vermorel SRL$Production Order].No_ 

我需要的所有条目的总和,从另一个表([SC Vermorel SRL$ProductieZilnica])从[SC Vermorel SRL$Production Order]表对应于每个不同No_重视。SELECT DISTINCT总和 - GROUP BY

我不相信上帝的爱使它工作。有人能指引我朝着正确的方向吗?

+0

的SQL Server 2005。 2015. –

+4

你有没有使用AS关键字来简化你的名字? – Steve

+2

截然不同,在同一个查询中group by是毫无意义的,这个group将会使它不同。在你的组中,你必须编写你选择的每一列(除了函数,如max,min,sum,...)你的查询不会这样做,因此它不会工作,但会返回错误。 – GuidoG

回答

4

首先,使用表aliases - 它会使您的查询更具可读性。

如果您使用GROUP BY,你需要添加的所有列,除了一个是在聚合函数(你有SUM)这样的:这是写在从vsstudio查询生成器

SELECT PO.No_, 
     PO.[Replan Ref_ No_], 
     PO.[Description], 
     PO.[Source No_], 
     PO.[Routing No_], 
     PO.Quantity, 
     PO.[Old Prod_ Order No_], 
     RL.[Run Time], 
     RL.[Run Time] * PO.Quantity AS TotalOre, 
     POL.[Finished Quantity], 
     SUM(PZ.[Cantitate sudura]) AS [Cantitate sudura], 
     SUM(PZ.[Cantitate montaj]) AS [Cantitate montaj] 
FROM [SC Vermorel SRL$Production Order] PO 
INNER JOIN [SC Vermorel SRL$Routing Line] RL 
    ON PO.[Routing No_] = RL.[Routing No_] 
INNER JOIN [SC Vermorel SRL$Prod_ Order Line] POL 
    ON PO.No_ = POL.[Prod_ Order No_] 
INNER JOIN [SC Vermorel SRL$ProductieZilnica] PZ 
    ON PO.No_ = PZ.RPO 
WHERE  (PO.Status = 3) AND (PO.[Location Code] = 'MACH FIN') AND 
        (PO.[Gen_ Prod_ Posting Group] = 'FINISHED G') AND (RL.No_ = '150') 
GROUP BY PO.No_, 
     PO.[Replan Ref_ No_], 
     PO.[Description], 
     PO.[Source No_], 
     PO.[Routing No_], 
     PO.Quantity, 
     PO.[Old Prod_ Order No_], 
     RL.[Run Time], 
     PO.Quantity, 
     POL.[Finished Quantity] 
+0

我即将发布相同的答案.. :) +1 .. –

+0

非常感谢你的答案和所有的建议。非常亲切。像往常一样,我是一个白痴,虽然是我问的方式正确的答案,我仍然需要一个建议:这个查询,以我问的方式,只输出具有值的条目总和列。我真正想要的是显示来自PO表的所有条目,即使它们对PZ表中的总和列有或没有值。再次感谢你们所有人!我的下一篇文章会更干净。 –

+0

我的荣幸!如果您需要PO中的ALL,请将所有INNER JOIN更改为LEFT JOIN,在这种情况下,RL,POL和SZ列中可能有空值。 INNER JOIN - 获取两个表中的所有值,LEFT JOIN显示所有值,但如果第二个表中没有核心指定行 - 它将显示NULL。 – gofr1