Задать вопрос
Ответы пользователя по тегу SQL
  • Cоставить SQL запрос?

    @wwi
    PS: последний QR1.Payment — лишний… он бессмысленный
    Ответ написан
    4 комментария
  • Cоставить SQL запрос?

    @wwi
    так и должно происходить
    Вы выбираете строку для каждого товара выбираете строку из ОПЛАТА
    и соответственно она суммируется столько раз, сколько у вас есть товарных строк.

    Рекомендую для более удобного чтения писать запросы через 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
    Ответ написан
    Комментировать