![]() |
|
Модераторы: skyboy |
![]()
|
|
| Juju |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Ребята,
есть три таблицы с данными, две из них связаны... нужно выбрать из них данные в 4-ую таблицу (через UNION я так полагаю), но сложность составляет с математическими вычислениями.. (Сразу оговорюсь, что БД уже работает... мне как всегда нужно пристроиться к уже готовой схеме) 1 таблица OPERATION (Операции) ID CLIENT (идентификатор клиента) D (дата операции) ITEM1 (количество первой группы) ITEM1_PRICE (цена первой группы) ITEM2 (количество второй группы) ITEM2_PRICE (цена второй группы) ... (остановлюсь на двух для наглядности) 2 таблица RASHODY(Расходы) (т.е. каждой записи таблицы OPERATION соответствует одна и больше записей в таблице RASHODY) ID OPERATION (идентификатор операции т.е. ID в таблице OPERATION) ITEM (предмет расхода) PRICE (сумма по расходу) 3 таблица CREDIT (кредит который выдается клиенту) ID CLIENT (идентификатор клиента) D (дата выдачи кредита) SUMA (сума по кредиту) Задача: сбить все данные в 4-ю таблицу вида: CLIENT (идентификатор клиента) D (дата) SUMA (сумма) т.е. Чтобы получить SUMA в таблице OPERATION и RASHODY нужно просуммировать:(ITEM1*ITEM1_PRICE)+(ITEM2*ITEM2_PRICE) и вычесть все расходы (RASHODY) которые соответствуют операции(OPERATION): SELECT SUM(PRICE)FROM RASHODY WHERE OPERATION =...??? <- вот тут у меня и стопор... как мне обозначить операцию??????? Напишу в целом запрос который я строил с ID клиента = 1 Знаки вопросов поставлю там где незнаю, как мне определить соответствующую записи операцию
|
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 6 Всего: 44 |
Если я правильно понял, нужно пользоваться алиасами для таблиц:
-------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Juju |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Deniz, спасибо за ответ, но я конечно же пробовал алиас перед тем как задать вопрос.
Вид был вот такой:
>а зачем там CREDIT? Хотят видеть полную статистику по клиенту... OPERATION (то что он отдает) CREDIT (то что ему дают) |
|||
|
||||
| Juju |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Дело в том, что как только перехожу на алиасы в выводе кроме первой записи в поле SUMA пустые значения (со второй и дальше) там где собираеться значения операций (OPERATION), там где с таблицы CREDIT - все ок!
Например: Дата Сумма 01.03.2008 -210 000 <- единственное значение, которое корректно(таблица OPERATION) 02.03.2008 <- пустое значение (таблица OPERATION) 04.03.2008 <- пустое значение (таблица OPERATION) 07.03.2008 40 000 <-это к примеру значение из таб.CREDIT 09.03.2008 <- пустое значение (таблица OPERATION) 11.03.2008 13.03.2008 14.03.2008 15.03.2008 |
|||
|
||||
| Juju |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
И это происходит тогда, когда в RASHODY нет никакого значения, т.е.
не имеет значения (NULL)! Неужели чтобы
возвращал 0, а не NULL там должно храниться 0-вое значение? (то ли бессонная ночь дает о себе знать то ли...) Это сообщение отредактировал(а) Juju - 1.7.2008, 16:42 |
||||
|
|||||
| Magnifico |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 4 Всего: 17 |
select sum (isnull (price,0)) from....
к тому же тема слишком специфична (банковские операци и прочее) чтобы сделать запрос нужна именно сама база , а не описание (хотя бы по 10 записей в каждой таблице) я даже приблизительно незнаю как заполнить твои таблицы -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
| Juju |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Magnifico
В общем тут не банковские операции, а усложненный калькулятор как по мне, но видимо я не достаточно доходчиво объяснил Имеем уже готовую БД, структуру которой, я не имею права изменять. Действующие таблицы: OPERATION ID CLIENT D ITEM1 ITEM_PRICE ITEM2 ITEM_PRICE 1 1 05.06.2008 100 30,00 100 45,00 2 1 07.06.2008 200 30,00 200 45,00 3 1 08.06.2008 150 35,00 100 50,00 4 2 10.06.2008 100 40,00 120 45,00 5 3 20.06.2008 250 40,00 150 45,00 RASHODY ID OPERATION ITEM PRICE 1 1 транспорт 480,00 2 1 гостиница 270,00 3 2 питание 80,00 4 2 транспорт 560,00 5 4 разгрузка 300,00 CREDIT ID CLIENT D SUMA 1 1 12.06.2008 4600,00 2 1 14.06.2008 3000,00 3 2 15.06.2008 1200,00 4 3 22.06.2008 6000,00 5 4 26.06.2008 1300,00 Задача: сбить все данные в 4-ю таблицу (например CLIENTCARD) вида: CLIENT (идентификатор клиента) D (дата) SUMA (сумма) т.е. берем клиента с ID равным 1 Просчитываем операции(OPERATION-RASHODY) и выданные ему кредиты(CREDIT) (авансы, как угодно) 1) OPERATION.ID1 - RASHODY (OPERATION.ID1) (100*30 + 100*45) - (480+270) = 6750 имеем запись в CLIENTCARD: CLIENT D SUMA 1 05.06.2008 6750 2) берем следующую операцию с клиентом и т.д............ т.е. для автоматизации процесса, чтобы запрос движения по клиенту с ID = 1 выглядело так: CLIENT D SUMA 1 05.06.2008 -6750 1 07.06.2008 -14360 1 08.06.2008 -10250 1 12.06.2008 4600 1 14.06.2008 3000 нужен запрос:
и все бы хорошо, если бы не бы не операция 08.06.2008, где небыло ни одного расхода... т.е.
дает NULL и в таблице выводиться пустое значение: CLIENT D SUMA 1 05.06.2008 -6750 1 07.06.2008 -14360 1 08.06.2008 <-------- вот здесь!!!!! 1 12.06.2008 4600 1 14.06.2008 3000 P.S. Я конечно решил эту проблему путем добавления записи в таблицу RASHODY содержащей нулевое значение в поле PRICE, если в Операции не присутствуют расходы... И скрыл эту запись от пользователя... так что визуально ничего мулящего глаз не происходит НО ВЕДЬ ЭТО ПРОСТО "КРИВО РЕШЕННАЯ ПРОБЛЕМА!" Это сообщение отредактировал(а) Juju - 2.7.2008, 09:20 |
||||
|
|||||
| Magnifico |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 4 Всего: 17 |
есть подозрения что ты неправильно расчитываешь операции
посчитай сам вручную по твоем у алгоритму за каждое число :
o.id это у тебя суррогатный ключ o.id замени на o.client
Это сообщение отредактировал(а) Magnifico - 2.7.2008, 11:38 -------------------- Всё в порядке - спасибо зарядке ! |
||||
|
|||||
| Juju |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Magnifico, а чего это у тебя на разные операции все расходы одинаковые???
Вот тут ты ошибся... В таблице RASHODY есть поле OPERATION, которое содержит соответствующее ID таблицы OPERATION Поэтому не такие расчеты должны быть: CLIENT D SUMA 1 05.06.2008 (100*30 + 100*45) - (480+270) = 6750 1 07.06.2008 (200*30 + 200*45) - (480+270) = 14250 1 08.06.2008 (150*35 +100*50) - (480+270) = 9500 а такие: CLIENT D SUMA 1 05.06.2008 (100*30 + 100*45) - (480+270) = 6750 1 07.06.2008 (200*30 + 200*45) - (80+560) = 14360 1 08.06.2008 (150*35 +100*50) - (0) = 10250 Дело в том, что когда расходы равны 0 как за 08.06.2008 значение в таблицу не выводятся... А про сурогатный ключ - это ни к чему, т.к. сам запрос работает корректно, если только есть значение (пусть содержащее 0) по расходам... Ладно... криво- не криво я сделал правильный вывод значений... А вот Как подсчитать Сумму поля SUMA построенной таким запросом таблицы? Т.е. если запросом:
Мы получаем табличку: CLIENT D SUMA 1 05.06.2008 -6750 1 07.06.2008 -14360 1 08.06.2008 -10250 1 12.06.2008 4600 1 14.06.2008 3000 Как подсчитать сумму поля SUMA этой таблицы? |
|||
|
||||
| Magnifico |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 4 Всего: 17 |
первй вопрос так попробуй
результат: ID D CLIENT SUMA 1 05.06.2008 1 -6 750.00р. 2 07.06.2008 1 -14 360.00р. 3 08.06.2008 1 -10 250.00р. Добавлено через 2 минуты и 45 секунд второй вопрос так попробуй
-------------------- Всё в порядке - спасибо зарядке ! |
||||
|
|||||
| Juju |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 26.10.2006 Репутация: нет Всего: 1 |
Magnifico, ну что я могу еще сделать?
Только В ОЧЕРЕДНОЙ РАЗ сказать тебе ОГРОМНОЕ СПАСИБИЩЕ!!! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |