总结不同的行

Summing Distinct Rows

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

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

看来您需要按 PartID 分组

  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) 

并且您可以使用别名 table 名称来减少文本,例如

  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)