![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
AntonPavlov |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 28.5.2010 Репутация: нет Всего: нет |
Доброго времени суток!
Помогите, пожалуйста решить следующую проблему. Есть три таблицы: Income[id, Sdate, id_elem, amount] (приход деталей, содержит инфо о приходящих на склад деталях, из таблицы Nomenclature, за определенную дату, в определенном количестве), Outgo[id, Sdate, id_elem, amount] (расход деталей, содержит инфо о расходованных деталях, из таблицы Nomenclature, за определенную дату, в определенном количестве), Nomenclature[id, name_elem] (справочник деталей). Необходимо выбрать наименование детали, дата расхода, когда расходованное количество превысило имеющееся количество деталей. Упорядочить по наименованию детали и дате расхода. Пытаюсь делать так: а) Создаем представление, которое возвращает разность между количеством каждой когда-либо израсходованной запчасти, и количеством этой же когда-либо пришедшей на склад запчасти:
b) Выводим название запчасти и дату расхода, учитывая, что разность, возвращаемая представлением OutMinusInc, должна быть больше нуля:
Это работает не верно. Из за того, что происходит группировка по датам (в пункте а), получается неверный результат. Без группировки по дате запрос не работает. Как избавиться от группировки и получить верный результат? |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Нормализуйте данные - избавьтесь от 2 идентичных таблиц, держите всё в одной (расход - отрицательное количество, например).
Тогда достаточно тривиального запроса, считающего нарастающий итог. Подход содержит внутреннюю ошибку - не учитывается порядок обработки данных. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
password |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.9.2008 Где: Украина, Сумы Репутация: 3 Всего: 8 |
Не написали какая база данных.
Или добавьте в таблицу Outgo поле с таблицы Income.id (с какого прихода взята деталь.) Можно так же написать тригер на расход, который не позволит снимать детали больше чем есть на складе. По поводу вашего sql мои наброски (не проверял, может и не работать)
Это сообщение отредактировал(а) password - 10.6.2014, 10:35 |
||||
|
|||||
AntonPavlov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 28.5.2010 Репутация: нет Всего: нет |
password, спасибо большое за помощь!
НО! Этот запрос тоже работает не совсем корректно. Проблема в том, что в случае (ниже - примерная иллюстрация, описывающая неподходящую ситуацию):
ничего не выведется! То есть: в случае, если сумма пришедших за все даты запчастей "покрывает" сумму ушедших за все даты запчастей, запрос работает не верно, что иллюстрирует таблица выше. Это сообщение отредактировал(а) AntonPavlov - 11.6.2014, 16:07 |
|||
|
||||
password |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.9.2008 Где: Украина, Сумы Репутация: 3 Всего: 8 |
Тогда попробуйте как то так:
P.S. еще раз акцентирую внимание на том что нужно добавить в таблицу Outgo поле Income.id, чтобы привязать из какого прихода взята деталь, для упрощения таких выборок и недопущения таких случаев. Это сообщение отредактировал(а) password - 11.6.2014, 21:19 |
|||
|
||||
AntonPavlov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 28.5.2010 Репутация: нет Всего: нет |
Спасибо еще раз, попробую чуть позже!!
А что значит
? Насчет добавления поля Income.id - я понял, но, дело в том, что эта вся муть - курсовик. Структура БД уже утверждена, и, в связи с упоротостью и полной неадекватностью преподавателя, вносить изменения в структуру будет уже теперь крайне проблематично. |
|||
|
||||
password |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 76 Регистрация: 23.9.2008 Где: Украина, Сумы Репутация: 3 Всего: 8 |
В данном случае нам не важно какое значение в селекте, а важно что выполняется условие в exists EXISTS |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |