мы пытаемся заставить нашу таблицу складывать вместе все значения в столбце 2 (QtyComp - в основном столбец выражения qtyorder * totalqty), где у них одинаковый ItemNo (столбец 1).
Итак, на данный момент мы получаем следующее:
ItemNo QtyCom
7441 3
7441 1
7441 5
Мы хотим, чтобы он возвращал это:
ItemNo QtyCom
7441 9
Наш код ниже; Я выделил жирным шрифтом ту часть, которая нам нужна, чтобы суммировать результаты:
SELECT TOP (100) PERCENT ItemSpecs_2.itemno,
workorderdetails.qtycomplete *
ItemSpecFullStruc_2.totalqtyperroot AS QtyComp
FROM dbo.workorderdetails AS WorkOrderDetails
INNER JOIN dbo.itemspecfullstruc AS ItemSpecFullStruc_2
ON ItemSpecFullStruc_2.rootitemspecid =
workorderdetails.itemspecid
INNER JOIN dbo.itemspecs AS ItemSpecs_2
ON ItemSpecs_2.itemspecid = ItemSpecFullStruc_2.childitemspecid
INNER JOIN dbo.workorder AS WorkOrder_1
ON WorkOrder_1.workorderid = workorderdetails.workorderid
LEFT OUTER JOIN dbo.tobescheduled_completed
ON WorkOrder_1.workorderid =
dbo.tobescheduled_completed.workorderid
WHERE ( workorderdetails.completed = 1 )
AND ( workorderdetails.compdate > Getdate() - 42 )
GROUP BY ItemSpecs_2.itemno,
workorderdetails.qtyordered,
ItemSpecFullStruc_2.totalqtyperroot,
workorderdetails.[lineno],
workorderdetails.qtycomplete,
workorderdetails.compdate,
workorderdetails.qtycomplete * ItemSpecFullStruc_2.totalqtyperroot
Мы были бы очень признательны за идеи!
Спасибо, Триш
приложить некоторые усилия, чтобы сделать код более читабельным.
Извинения. Ключевым моментом здесь является часть уравнения «Выбрать», поэтому (я упростил дескрипторы полей): SELECT TOP (100) PERCENT ItemSpecs.ItemNo, WorkOrder.QtyOrdered * ItemSpec.TotalQty AS QtyComp
Приведенное выше возвращает правильные результаты в каждой строке, но не группирует их вместе. Альтернативой, которая их группирует, является SELECT TOP (100) PERCENT ItemSpecs.ItemNo, SUM (WorkOrder.QtyOrdered * ItemSpec.TotalQty) AS QtyComp
Под «умножением неправильно» я подразумеваю, что, хотя вторая строка выше группирует, кажется, что суммируется QtyOrdered перед выполнением QtyOrdered * TotalQty?
Последний запрос будет суммировать и сгруппировать его, должно быть что-то не так с данными, можете ли вы добавить некоторые образцы данных и ожидаемый результат
Теперь упростил вопрос - надеюсь, это поможет?
Похоже, вам нужна СУММА. Сделайте сумму (workorderdetails.qtycomplete * ItemSpecFullStruc_2.totalqtyperroot)
Также я считаю, что вы можете удалить последнюю строку


Попробуй это
SELECT TOP (100) PERCENT ItemSpecs_2.itemno,
sum(workorderdetails.qtycomplete *
ItemSpecFullStruc_2.totalqtyperroot) AS QtyComp
FROM dbo.workorderdetails AS WorkOrderDetails
INNER JOIN dbo.itemspecfullstruc AS ItemSpecFullStruc_2
ON ItemSpecFullStruc_2.rootitemspecid =
workorderdetails.itemspecid
INNER JOIN dbo.itemspecs AS ItemSpecs_2
ON ItemSpecs_2.itemspecid = ItemSpecFullStruc_2.childitemspecid
INNER JOIN dbo.workorder AS WorkOrder_1
ON WorkOrder_1.workorderid = workorderdetails.workorderid
LEFT OUTER JOIN dbo.tobescheduled_completed
ON WorkOrder_1.workorderid =
dbo.tobescheduled_completed.workorderid
WHERE ( workorderdetails.completed = 1 )
AND ( workorderdetails.compdate > Getdate() - 42 )
GROUP BY ItemSpecs_2.itemno,
workorderdetails.qtyordered,
ItemSpecFullStruc_2.totalqtyperroot,
workorderdetails.[lineno],
workorderdetails.qtycomplete,
workorderdetails.compdate
SELECT SUM(QTYCOM) OVER (PARTITION BY ITEMNO)
FROM
...
После того, как вы будете использовать top для оператора select, вам нужно будет использовать order by. вы можете попробовать следующий запрос.
SELECT TOP(100) PERCENT A.itemno,SUM(QtyComp) FROM
(SELECT ItemSpecs_2.itemno,
(workorderdetails.qtycomplete *
ItemSpecFullStruc_2.totalqtyperroot) AS QtyComp
FROM dbo.workorderdetails AS WorkOrderDetails
INNER JOIN dbo.itemspecfullstruc AS ItemSpecFullStruc_2
ON ItemSpecFullStruc_2.rootitemspecid =
workorderdetails.itemspecid
INNER JOIN dbo.itemspecs AS ItemSpecs_2
ON ItemSpecs_2.itemspecid = ItemSpecFullStruc_2.childitemspecid
INNER JOIN dbo.workorder AS WorkOrder_1
ON WorkOrder_1.workorderid = workorderdetails.workorderid
LEFT OUTER JOIN dbo.tobescheduled_completed
ON WorkOrder_1.workorderid =
dbo.tobescheduled_completed.workorderid
WHERE ( workorderdetails.completed = 1 )
AND ( workorderdetails.compdate > Getdate() - 42 ) ) A
GROUP BY A.itemno
ORDER BY A.itemno
Спасибо
Что вы имеете в виду под «умножением неправильно»?