Запись SQL-запроса в итоговые записи с помощью GROUP BY - PullRequest
0 голосов
/ 06 февраля 2019

Я запрашиваю данные о том, что mc.Amount должен быть одной записью, но я обнаружил, что пользователи добавляли несколько записей на номер заказа.Приведенный ниже код дает мне мой набор записей, но у меня возникают проблемы, определяющие, как бы я суммировал mc.Amount за oh.Order_Number.

Все поля одинаковы, кроме mc.Amount

Мне кажется, мне нужен подзапрос, но я не смог заставить его работать.Буду признателен за любую помощь.

SELECT DISTINCT 
oh.Order_Number AS Order_Number,
od.Part_Number AS Job_Name,
od.Unit_Price AS Sale_Price,
mc.Amount AS PieceRate_Labor_Cost,
oh.Total_Labor_Cost AS Hourly_Labor_Cost,
oh.Total_Material_Cost AS Total_Material_Cost,
SUM(oh.Total_Labor_Cost + oh.Total_Material_Cost+ mc.Amount) AS 
Total_Cost,
ROUND(qbd.Profit_Percent,2) AS Profit_Percent,
od.Part_Family_Code AS FBGM,
ROUND(SUM(((od.Unit_Price - (oh.Total_Labor_Cost + 
oh.Total_Material_Cost + mc.Amount))/ 
NULLIF(od.Unit_Price,0.00))*100),2) AS Final_Margin 

FROM dbo.Order_Header oh
LEFT OUTER JOIN dbo.Order_Detail od ON oh.Order_Header_ID = 
od.Order_Header_ID
LEFT OUTER JOIN dbo.Miscellaneous_Charge mc ON od.Order_Detail_ID = 
mc.Order_Detail_ID
LEFT OUTER JOIN dbo.Quantity_Break_Detail qbd ON mc.Order_Detail_ID = 
qbd.Order_Detail_ID

WHERE oh.Order_Number  BETWEEN  '74991' AND '75400'  AND od.Unit_Price > 
0 AND mc.Miscellaneous_Charge_Code <> 'FREIGHT'

GROUP BY 

oh.Order_Number, mc.Miscellaneous_Charge_Code, 
mc.Amount,oh.Total_Labor_Cost, oh.Total_Material_Cost, 
qbd.Profit_Percent, od.Part_Family_Code, od.Unit_Price, od.Part_Number

Результаты: (некоторые поля пропущены)

Order_Number: Sale_Price: PieceRate_Labor_Cost: Houly_Labor_Cost

75024       : 1890      : 43                  : 110.49

75025       : 4938      : 105.5               : 167.51

75025       : 4938      : 281.25              : 167.51

75026       : 5000      : 251.10              : 85.00

75027       : 4352      : 142.65              : 142.00

75027       : 4352      : 68.25               : 142.00

75028       : 1568      : 98.25               : 25.62

Я бы хотел, чтобы мой окончательный результат был:

Order_Number: Sale_Price: PieceRate_Labor_Cost: Houly_Labor_Cost

75024       : 1890      : 43                  : 110.49

75025       : 4938      : 386.75              : 167.51

75026       : 5000      : 251.10              : 85.00

75027       : 4352      : 210.9               : 142.00

75028       : 1568      : 98.25               : 25.62

1 Ответ

0 голосов
/ 06 февраля 2019

кажется, вам нужна сумма (mc.Amount) AS PieceRate_Labor_Cost (и для этого вы не должны использовать mc.amount в группе по)

SELECT 
oh.Order_Number AS Order_Number,
od.Part_Number AS Job_Name,
od.Unit_Price AS Sale_Price,
sum(mc.Amount)  AS PieceRate_Labor_Cost,
oh.Total_Labor_Cost AS Hourly_Labor_Cost,
oh.Total_Material_Cost AS Total_Material_Cost,
SUM(oh.Total_Labor_Cost + oh.Total_Material_Cost+ mc.Amount) AS 
Total_Cost,
ROUND(qbd.Profit_Percent,2) AS Profit_Percent,
od.Part_Family_Code AS FBGM,
ROUND(SUM(((od.Unit_Price - (oh.Total_Labor_Cost + 
oh.Total_Material_Cost + mc.Amount))/ 
NULLIF(od.Unit_Price,0.00))*100),2) AS Final_Margin 

FROM dbo.Order_Header oh
LEFT OUTER JOIN dbo.Order_Detail od ON oh.Order_Header_ID = 
od.Order_Header_ID
LEFT OUTER JOIN dbo.Miscellaneous_Charge mc ON od.Order_Detail_ID = 
mc.Order_Detail_ID
LEFT OUTER JOIN dbo.Quantity_Break_Detail qbd ON mc.Order_Detail_ID = 
qbd.Order_Detail_ID

WHERE oh.Order_Number BETWEEN 74991 AND 75400 AND od.Unit_Price > 
0 AND mc.Miscellaneous_Charge_Code <> 'FREIGHT'

GROUP BY 

oh.Order_Number, mc.Miscellaneous_Charge_Code, 
oh.Total_Labor_Cost, oh.Total_Material_Cost, 
qbd.Profit_Percent, od.Part_Family_Code, od.Unit_Price, od.Part_Number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...