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