Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / sql запрос / 12 сообщений из 12, страница 1 из 1
30.07.2018, 11:33
    #39680941
alexkl123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
Никак не пойму как сделать запрос. Есть таблица "Оказанные услуги", есть "Оплата" этих услуг. Может быть несколько записей Оплаты на одну Оказанную услугу, может не быть вообще. В Оказанных услугах есть Код клиента. Нужно сделать выборку "Код клиента" и его долг (СтоимостьУслуги - сумма его платежей).

SELECT [Оказанные услуги].КодКлиента, Sum(Оплата.СуммаОплаты) AS paid
FROM [Оказанные услуги] LEFT JOIN Оплата ON [Оказанные услуги].Код = Оплата.КодУслуги
GROUP BY [Оказанные услуги].КодКлиента;

куда здесь вставить Стоимость услуги, внутрь суммы не получится,будет считать неправильно, снаружи Стоимость услуги-Sum, то выражение не будет частью статистической функции или группы

Попробовал сделать так

SELECT [Оказанные услуги].КодКлиента, ([Оказанные услуги].СуммаОплаты-Nz((SELECT Sum(Оплата.СуммаОплаты) AS [Sum-СуммаОплаты] FROM [Оплата] where Оплата.КодУслуги=[Оказанные услуги].Код),0)) AS debt
FROM [Оказанные услуги], Оплата
GROUP BY [Оказанные услуги].КодКлиента, [Оказанные услуги].Код, [Оказанные услуги].СуммаОплаты;
считает правильно, но не могу сгруппировать по Коду клиента, если убрать из группировки Код и Сумму Оплаты, тогда вложенный селект будет ругаться
...
Рейтинг: 0 / 0
30.07.2018, 12:04
    #39680966
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
alexkl123,
это очень примерно,но схема должна быть примерно такой(естессно вынести перечень услуг со стоимостью в отдельную таблицу):
...
Рейтинг: 0 / 0
30.07.2018, 12:43
    #39680994
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
Лефтджоин не забудь.
Иначе из выборки пропадут клиенты с начислениями, но без оплат.
...
Рейтинг: 0 / 0
30.07.2018, 13:01
    #39681010
alexkl123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
sdku,

Спасибо, но это примерно, что у меня вверху. Получить сумму оплат по услуге - не проблема. Но нужно добавить в таблицу Услуги стоимость этой услуги и брать не сумму оплат, а стоимость услуги - сумма оплат. Вот это я не пойму как сделать.
...
Рейтинг: 0 / 0
30.07.2018, 13:08
    #39681014
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
982183,
прошу пардону-забыл
...
Рейтинг: 0 / 0
30.07.2018, 13:37
    #39681049
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
А я что-то проблемы не понял
Должно работать в простейшем виде:

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Оплата.Клиент, 
            Sum(Услуги.Отгрузка) AS Отгрузка,
            Sum(Оплата.оплата) AS Оплата,
            Sum(Услуги.Отгрузка)-Sum(Оплата.оплата) AS Долг
FROM Оплата, Услуги
WHERE Оплата.Клиент=Услуги.Клиент
GROUP BY Оплата.Клиент



Где проблема начинается?
...
Рейтинг: 0 / 0
30.07.2018, 13:50
    #39681064
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
alexkl123Но нужно добавить в таблицу Услуги стоимость этой услуги и брать не сумму оплат, а стоимость услуги - сумма оплат. Вот это я не пойму как сделать.
на форме должно быть поле со списком [услуги],которое "проглотит" только то значение которое есть в таблице [услуги], если же в него вводить значение отсутствующее в таблице [услуги]то надо обработать событие "отсутствиеВсписке" для этого combo.
Примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Private Sub Услуга_NotInList(NewData As String, Response As Integer)
    
    ' Добавляет новый тип при вводе с клавиатуры
    ' в поле со списком "Услуга".

    Dim intNewCategory As Integer, intTruncateName As Integer, strTitle As String, intMsgDialog As Integer

    ' Выводит окно сообщения с приглашением подтвердить
    ' добавление нового типа.
    strTitle = "Услуга отсутствует в списке"
    intMsgDialog = vbYesNo + vbQuestion + vbDefaultButton1
    intNewCategory = MsgBox("Добавить новую?", intMsgDialog, strTitle)

    If intNewCategory = vbYes Then
        ' Удаляет новое имя из поля "Ваше combo(услуга)", позволяя выполнить.
        ' обновление элемента управления при возвращении в форму.
        DoCmd.RunCommand acCmdUndo

       
        ' Открывает форму "ДобавлениеУслуги". Ваша форма для добавления услуги
        DoCmd.OpenForm "ДобавлениеУслуги", acNormal, , , acAdd, acDialog, NewData
        
        ' Продолжение без вывода стандартного сообщения об ошибке.
        Response = acDataErrAdded
    End If

End Sub


'в форме для добавления услуги
 Private Sub Form_Load()
            Me!услуга= Me.OpenArgs 'новая услуга
         
End Sub
...
Рейтинг: 0 / 0
30.07.2018, 13:52
    #39681066
alexkl123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
982183,

Считает неправильно. Допустим на одну отгрузку две оплаты. Тогда будет считать Отгрузка-Оплата1 + Огрузка-Оплата2, Отгрузку берет столько раз сколько оплат, а должно быть Отгрузка - (Оплата1+Оплата2), такое чувство что нужно distinct куда-то прилепить.
...
Рейтинг: 0 / 0
30.07.2018, 13:58
    #39681071
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
вдогонку:если в таблицу нужно добавить запись содержащую одно поле(но это не Ваш случай-кроме наименования услуги будет второе поле-её стоимость) можно не создавать форму для добавления а в процедуре добавить запись в таблицу запросом
...
Рейтинг: 0 / 0
30.07.2018, 14:01
    #39681072
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
Ну так, если не умеешь делать составные запросы,

Напиши сначала запрос "Оплаты"
Код: sql
1.
2.
3.
SELECT Оплата.Клиент, Sum(Оплата.оплата) AS Оплата
FROM Оплата
GROUP BY Оплата.Клиент;



А в основном запросе обратись к нему.
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Оплаты.Клиент, Sum(Услуги.Отгрузка) AS Отгрузка,
 Sum(Оплаты.оплата) AS Оплата,
 Sum(Услуги.Отгрузка)-Sum(Оплаты.оплата) AS Долг
FROM Оплаты, Услуги
WHERE Оплаты.Клиент=Услуги.Клиент
GROUP BY Оплаты.Клиент;
...
Рейтинг: 0 / 0
30.07.2018, 14:04
    #39681073
alexkl123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
sdku,

Да у меня уже есть готовые таблицы с данными, мне нужно просто сделать выборку при помощи sql для отчета.
...
Рейтинг: 0 / 0
30.07.2018, 14:36
    #39681089
alexkl123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sql запрос
Всё, разобрался. Спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / sql запрос / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]