Sql 对不同行求和

Sql 对不同行求和,sql,sum,distinct,Sql,Sum,Distinct,我试图得到每个部分的总和,但出于某种原因,它没有给我一个与此代码不同的总和。它根据子查询中的记录数重复相同的零件号。我做错了什么 Select Distinct IIF(x.omlPartID in ('10027','10028') ,x.omlPartID ,x.jmaPartID) as PartID , Sum(Cast(Total_Quantity as INT)) as SumTot From ( SELECT distinct SalesOrderL

我试图得到每个部分的总和,但出于某种原因,它没有给我一个与此代码不同的总和。它根据子查询中的记录数重复相同的零件号。我做错了什么

Select Distinct IIF(x.omlPartID in ('10027','10028')
    ,x.omlPartID
    ,x.jmaPartID) as PartID
    , Sum(Cast(Total_Quantity as INT)) as SumTot
From (
    SELECT distinct SalesOrderLines.omlsalesorderID
        , salesorderlines.omlSalesOrderLineID
        , SalesOrderLines.omlPartID
        , JobAssemblyMaterialCombo2 .jmaPartID
        ,  (
            IIF(rtrim(SalesOrderLines.omlPartID) in ('10027','10028')
            , 1
            , JobAssemblyMaterialCombo2.jmaQuantityPerParent
            ) * SalesOrderLines.omlOrderQuantity
            ) As 'Total_Quantity'
    FROM M1_HB.dbo.SalesOrderLines SalesOrderLines 
    Left Outer Join M1_HB.dbo.SalesOrderJobLinks SalesOrderJobLinks 
        On SalesOrderLines.omlSalesOrderID = SalesOrderJobLinks.omjSalesOrderID 
            AND SalesOrderlines.omlSalesOrderLineID = SalesOrderJobLinks.omjSalesOrderLineID 
    Left Outer Join M1_HB.dbo.Jobs Jobs 
        on SalesOrderJobLinks.omjJobID = Jobs.jmpJobID 
    Left Outer Join M1_HB.dbo.JobAssemblyMaterialCombo2 JobAssemblyMaterialCombo2 
        On Jobs.jmpJobID = JobAssemblyMaterialCombo2. jmaJobID 
    Left Outer Join M1_HB.dbo.SalesOrders SalesOrders 
        On SalesOrderLines.omlSalesOrderID = SalesOrders.ompSalesOrderID 
    Left Outer Join M1_HB.dbo.Organizations Organizations 
        On SalesOrders.ompCustomerOrganizationID = Organizations.cmoOrganizationID 
    WHERE JobAssemblyMaterialCombo2 .jmaPartID in ('10027','10028') 
        or (
            SalesOrderLines.omlPartID in ('10027','10028') 
            and 
            JobAssemblyMaterialCombo2 .jmaPartID is Null
            )
) x
Group by x.omlPartID, x.jmaPartID

看来你需要一组一组的人

  Select IIF(x.omlPartID in ('10027','10028'),x.omlPartID,x.jmaPartID) as PartID, Sum(Cast(Total_Quantity as INT)) as SumTot
  From (SELECT distinct SalesOrderLines.omlsalesorderID, salesorderlines.omlSalesOrderLineID, SalesOrderLines.omlPartID, JobAssemblyMaterialCombo2 .jmaPartID, (IIF(rtrim(SalesOrderLines.omlPartID) in ('10027','10028'),1,JobAssemblyMaterialCombo2.jmaQuantityPerParent)*SalesOrderLines.omlOrderQuantity) As 'Total_Quantity'
  FROM M1_HB.dbo.SalesOrderLines SalesOrderLines 
  Left Outer Join M1_HB.dbo.SalesOrderJobLinks SalesOrderJobLinks On SalesOrderLines.omlSalesOrderID = SalesOrderJobLinks.omjSalesOrderID AND SalesOrderlines.omlSalesOrderLineID = SalesOrderJobLinks.omjSalesOrderLineID 
  Left Outer Join M1_HB.dbo.Jobs Jobs on SalesOrderJobLinks.omjJobID = Jobs.jmpJobID 
  Left Outer Join M1_HB.dbo.JobAssemblyMaterialCombo2 JobAssemblyMaterialCombo2 On Jobs.jmpJobID = JobAssemblyMaterialCombo2 .jmaJobID 
  Left Outer Join M1_HB.dbo.SalesOrders SalesOrders On SalesOrderLines.omlSalesOrderID = SalesOrders.ompSalesOrderID 
  Left Outer Join M1_HB.dbo.Organizations Organizations On SalesOrders.ompCustomerOrganizationID = Organizations.cmoOrganizationID 
  WHERE JobAssemblyMaterialCombo2 .jmaPartID in ('10027','10028') or (SalesOrderLines.omlPartID in ('10027','10028') and JobAssemblyMaterialCombo2 .jmaPartID is Null)) x
  Group by IIF(x.omlPartID in ('10027','10028'),x.omlPartID,x.jmaPartID) 
您可以使用别名表名来减少文本

  Select IIF(x.omlPartID in ('10027','10028'),x.omlPartID,x.jmaPartID) as PartID
  , Sum(Cast(Total_Quantity as INT)) as SumTot
  From (SELECT distinct sol.omlsalesorderID, salesorderlines.omlSalesOrderLineID
    , sol.omlPartID, jamc2.jmaPartID, (IIF(rtrim(sol.omlPartID) 
        in ('10027','10028')
    ,1,jamc2jmaQuantityPerParent)*sol.omlOrderQuantity) As 'Total_Quantity'
  FROM M1_HB.dbo.SalesOrderLines sol 
  Left Outer Join M1_HB.dbo.SalesOrderJobLinks sollink On sol.omlSalesOrderID = sollink.omjSalesOrderID 
        AND SalesOrderlines.omlSalesOrderLineID = sollink.omjSalesOrderLineID 
  Left Outer Join M1_HB.dbo.Jobs Jobs on sollink.omjJobID = Jobs.jmpJobID 
  Left Outer Join M1_HB.dbo.JobAssemblyMaterialCombo2 jamc2 On Jobs.jmpJobID = jamc2.jmaJobID 
  Left Outer Join M1_HB.dbo.SalesOrders so On sol.omlSalesOrderID = so.ompSalesOrderID 
  Left Outer Join M1_HB.dbo.Organizations org On so.ompCustomerOrganizationID = org.cmoOrganizationID 
  WHERE jamc2.jmaPartID in ('10027','10028') or (sol.omlPartID in ('10027','10028') and jamc2.jmaPartID is Null)) x
  Group by IIF(x.omlPartID in ('10027','10028'),x.omlPartID,x.jmaPartID) 

更新您的问题添加适当的数据示例、您的实际结果和预期结果..学习使用表别名。如果您给出的只是一个不完整、无法读取的查询,您希望人们如何帮助您???从你想要完成的事情开始。提供示例输入、预期输出、表关系。也许,人们会帮助你。读这个。你用哪一种?“SQL”只是一种查询语言,而不是特定数据库产品的名称(标准SQL中没有
iif
)。请为您正在使用的数据库产品添加标记Hi-scaisEdge,感谢您的回复。Hi-scaisEdge,我正在SQL Server Management Studio 2017上运行查询。它告诉我“Part ID”不是有效的列,并突出显示“groupby PartID”。当我把它改回“Group by x.omlPartID,x.jmaPartID”时,它返回的结果与我原来得到的结果相同。我没有得到明显的PartID vs Sum记录。太棒了!非常感谢您的帮助。