2012-05-07 6 views
0

Мой текущий SQL-запрос:Как получить СУММУ одного столбца на основе другого?

SELECT WorkOrderParts.PartQTY, 
     '$' + CONVERT(varchar(22), WorkOrderParts.PartCost, 1) AS PartCost, 
     '$' + CONVERT(varchar(22), WorkOrderParts.PartQTY * WorkOrderParts.PartCost, 1) AS PartsTotal, 
     tblParts.fldMfgPartNumber 
FROM tblWorkorders 
INNER JOIN WorkOrderParts ON tblWorkorders.ID = WorkOrderParts.WorkOrderId 
INNER JOIN tblParts ON WorkOrderParts.PartId = tblParts.ID 
WHERE (tblWorkorders.ProcessedDate BETWEEN '5/1/2012 12:00:00 AM' 
             AND '5/2/2012 12:00:00 AM') 
GROUP BY tblWorkorders.ProcessedDate, WorkOrderParts.PartCost, 
     WorkOrderParts.PartQTY, tblParts.fldMfgPartNumber, tblWorkorders.ID 
ORDER BY tblParts.fldMfgPartNumber 

Данные возвращаются:

PartQTY PartCost PartsTotal fldMfgPartNumber 
------- -------- ---------- ---------------- 
1  $48.71 $48.71  1878042C91 
1  $48.71 $48.71  1878042C91 
1  $48.71 $48.71  1878042C91 
1  $11.82 $11.82  1R1804 
1  $11.82 $11.82  1R1804 
1  $11.82 $11.82  1R1804 
4  $255.39 $1,021.56 2697041 
1  $8.94  $8.94  3719 

Как я могу изменить свой SQL запрос, чтобы вернуть следующие результаты:

PartQTY PartCost PartsTotal fldMfgPartNumber 
------- -------- ---------- ---------------- 
3  $48.71 $146.13  1878042C91 
3  $11.82 $35.46  1R1804 
4  $255.39 $1,021.56 2697041 
1  $8.94  $8.94  3719 
+0

Мне кажется, вам нужно взять tblWorkorders.ProcessedDate из группы. Вероятно, они уникальны. Удаление, которое будет правильно группировать результаты (я думаю) – MikeTWebb

ответ

0

Вы имеете в виду что-то вроде GROUP BY st atement?

select sum(PartQTY), avg(PartCost), sum(PartsTotal), fldMfgPartNumber from Table group by fldMfgPartNumber

0

Предполагая, что tblParts.fldMfgPartNumber это столбец вы хотите сгруппировать по (который я предполагаю, что это - на основе ожидаемого результирующем), то вы можете попробовать что-то вроде:

SELECT SUM(WorkOrderParts.PartQTY), 
    '$' + CONVERT(VARCHAR(22), MIN(WorkOrderParts.PartCost), 1) AS PartCost, 
    '$' + CONVERT(VARCHAR(22), SUM(WorkOrderParts.PartQTY * WorkOrderParts.PartCost), 1) AS PartsTotal, 
    tblParts.fldMfgPartNumber 
FROM tblWorkorders 
INNER JOIN WorkOrderParts ON tblWorkorders.ID = WorkOrderParts.WorkOrderId 
INNER JOIN tblParts ON WorkOrderParts.PartId = tblParts.ID 
WHERE (tblWorkorders.ProcessedDate BETWEEN '5/1/2012 12:00:00 AM' AND '5/2/2012 12:00:00 AM') 
GROUP BY tblParts.fldMfgPartNumber; 
0
SELECT SUM(WorkOrderParts.PartQTY) as PartQTY, '$' + CONVERT(varchar(22), 
     WorkOrderParts.PartCost, 1) AS PartCost, '$' + CONVERT(varchar(22), 
     WorkOrderParts.PartQTY * WorkOrderParts.PartCost, 1) AS PartsTotal, 
     tblParts.fldMfgPartNumber 
FROM tblWorkorders 
INNER JOIN WorkOrderParts ON tblWorkorders.ID = WorkOrderParts.WorkOrderId 
INNER JOIN tblParts ON WorkOrderParts.PartId = tblParts.ID 
WHERE (tblWorkorders.ProcessedDate BETWEEN '5/1/2012 12:00:00 AM' 
             AND '5/2/2012 12:00:00 AM') 
GROUP BY tblWorkorders.ProcessedDate, WorkOrderParts.PartCost, 
     tblParts.fldMfgPartNumber, tblWorkorders.ID 
ORDER BY tblParts.fldMfgPartNumber 
Смежные вопросы