так и должно происходить
Вы выбираете строку для каждого товара выбираете строку из ОПЛАТА
и соответственно она суммируется столько раз, сколько у вас есть товарных строк.
Рекомендую для более удобного чтения писать запросы через JOIN
Если по счету может быть несколько оплат вам нужно использовать подзапросы
1. Определить счет и подзапросом итог поступлений закрывающих счет
2. определить его цену = сумму (итого по Naimen)
3. вывести результат
в реальных условиях, правильнее отслеживать счета закрытые оплатами
(как минимум по признаку «счет оплачен полностью»)
В вашей схеме — вы всегда проводите расчет по всей БД без ограничений…
ниже запрос который выполнить вашу задачу (не оптимизированный):
Select QR1.*,
sum(Naimen.Kolvo*Naimen.Cena) AS SUMM,
sum(Naimen.Kolvo*Naimen.Cena) — QR.Payment AS RAZN
FROM (
SELECT
SCHET.Data,
Postav.Nazv,
Schet.Shet,
Schet.id,
Schet.OtKogo,
( Select sum(OPLATA.Opl) from Naimen Where Naimen.Shet = Schet.id ) As Payment
FROM Schet
JOIN Postav ON Postav.id=Schet.OtKogo
JOIN Oplata ON Oplata.Shet = Schet.id
GROUP BY
Schet.Data,
Postav.Nazv,
Schet.Shet,
Schet.id,
Schet.OtKogo
) QR1
JOIN Naimen ON Naimen.Shet = Schet.id
GROUP BY QR1.Data,
QR1.Nazv,
QR1.Shet,
QR1.id,
QR1.OtKogo,
QR1.Payment