|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
15.08.2016, 12:32 | #1 |
Пользователь
Регистрация: 15.08.2016
Сообщений: 13
|
Помогите разобраться с SQL-запросом
Доброго времени суток!
Есть три таблицы CLIENTS, DEALS, PAYMENTS. В CLIENTS хранятся данные о клиентах, в DEALS хранятся данные о сделках, а в PAYMENTS хранятся оплаты по сделкам. Оплаты проходят ни полными суммами, а частями в течение некоторого времени. Мне требуется узнать, по каким сделкам прошли оплаты после даты сделки, и вывести или полную сумму сделки, если сумма оплат превышает сумму сделок либо равна ей, или же частично, если сумма оплат меньше суммы сделки. Я сделал вот такой запрос, вроде бы всё правильно. Код:
Пример: Сумма оплат у Иванова с 01.05.2014 (дата сделки) по текущий момент равна 5000 Сумма оплат у Иванова с 01.02.2015 (дата сделки) по текущий момент равна 3000 Должен получиться следующий результат: Клиент=Иванов И.И. / Сумма сделки=10000 / Дата сделки = 01.05.2014 / Оплата = 5000 Клиент=Иванов И.И. / Сумма сделки= 7000 / Дата сделки = 01.02.2015 / Оплата = 0 На вторую сделку должен прийти НОЛЬ, т.к. сумма всех оплат <= сумме сделки и 5000 идут в погашение первой сделки! У меня получается: Клиент=Иванов И.И. / Сумма сделки=10000 / Дата сделки = 01.05.2014 / Оплата = 5000 Клиент=Иванов И.И. / Сумма сделки= 7000 / Дата сделки = 01.02.2015 / Оплата = 5000 А должно было прийти оплат на вторую сделку НОЛЬ! Второй пример: Сумма всех оплат Петрова с 01.01.2014 (дата сделки) по текущий момент равна 11000 Сумма всех оплат Петрова с 01.01.2015 (дата сделки) по текущий момент равна 6000 Должен получиться следующий результат: Клиент=Петров П.П. / Сумма сделки=8000 / Дата сделки = 01.01.2014 / Оплата = 8000 Клиент=Петров П.П. / Сумма сделки= 4000 / Дата сделки = 01.01.2015 / Оплата = 3000 На первую сделку пришло 8000, а на вторую 11000-8000=3000 У меня выходит вот что: Клиент=Петров П.П. / Сумма сделки=8000 / Дата сделки = 01.01.2014 / Оплата = 8000 Клиент=Петров П.П. / Сумма сделки= 4000 / Дата сделки = 01.01.2015 / Оплата = 4000 Оплата по второй сделке должна быть равна 3000! Не понимаю, как можно связать разные сделки клиента между собой... Подскажите, как нужно изменить запрос, чтобы получился нужный результат?! Последний раз редактировалось Аватар; 15.08.2016 в 14:12. |
15.08.2016, 12:44 | #2 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
В этой каше понять что то трудно, вы бы показали структуры и данные
|
15.08.2016, 12:49 | #3 |
Пользователь
Регистрация: 15.08.2016
Сообщений: 13
|
Вы имеете ввиду примеры таблиц?
|
15.08.2016, 12:50 | #4 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
Имею ввиду то что написал.
|
15.08.2016, 13:18 | #5 |
Пользователь
Регистрация: 15.08.2016
Сообщений: 13
|
Вот смотрите
|
15.08.2016, 13:31 | #6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Платеж к клиенту привязан, а к сделке ни как? В приведенном запросе так.
ADD И в приведенной структуре тоже Конфетку с такой структуры не сделаешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 15.08.2016 в 13:35. |
15.08.2016, 13:45 | #7 |
Пользователь
Регистрация: 15.08.2016
Сообщений: 13
|
Да, именно так! Платежи к сделкам не привязаны.
Оплаты покрывают сделки по старшинству... БД я переделать не могу, т.к. мы её готовую каждый месяц получаем |
15.08.2016, 13:48 | #8 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
одним запросом никак. ну или надо выдумывать всякие вложенные, цте и т.п.
нет учета "учтенных" оплат, т.е. сколько и для какой сделки если сначала проскочить по оплатам и как-то (нарастающий итог может применить) их распихать по сделкам, то потом (сверху) уже простым запросом сгруппировать. это первое что в голову пришло )) Последний раз редактировалось come-on; 15.08.2016 в 14:00. |
15.08.2016, 14:04 | #9 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Там заморишься вообще считать, если есть сделки с одной датой по клиенту. Если таковых нет, то высчитывать сумму сделок и платежей до даты сделки и сумму платежей начиная с даты сделки. Примерно так:
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
15.08.2016, 14:13 | #10 | |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с SQL запросом. | Mat Bourn | Помощь студентам | 15 | 21.05.2015 20:51 |
Не могу разобраться с SQL запросом точнее с конструкцией if then else | Pykhov | БД в Delphi | 15 | 27.08.2013 09:56 |
Помогите с SQL-запросом! | lordaleksej | БД в Delphi | 2 | 03.12.2009 22:55 |
Помогите разобраться с запросом | IgorBol | Microsoft Office Access | 2 | 06.10.2009 17:19 |
Помогите разобраться с SQL-запросом | MasterofCDM | БД в Delphi | 5 | 04.07.2008 13:42 |