Проблема в том, что
SELECT DISTINCTROW `itemcode` ID, `mlist` COST
может хранить несколько затрат для каждого идентификатора, поэтому
SELECT DISTINCTROW `cost` INTO ld_cost FROM `prod_itemcost` WHERE id = ls_id;
может вернуть несколько строк для каждого идентификатора.
Например, если стоимость покупки содержала следующее:
itemcode mlist pceffdate
1 10.99 10-apr-2009
1 11.99 10-apr-2009
1 9.99 09-apr-2009
Тогда временная таблица prod_itemcost будет содержать:
itemcode mlist
1 10.99
1 11.99
Оба значения являются значениями, действовавшими для самой последней pceffdate для этого кода элемента.
Это может вызвать проблемы с выбором mlist в ld_cost для itemcode 1, потому что есть два совпадающих значения, а скалярное ld_cost может содержать только одно.
Вам действительно нужно посмотреть на данные в закупочной стоимости. Если для одного элемента возможно иметь более одной записи с разными значениями mlist для одной и той же даты / времени, вам необходимо решить, как это следует обрабатывать. Возможно, возьмите самое высокое значение, или самое низкое значение, или любое значение. Или, возможно, это ошибка в данных.