![]() |
|
Модераторы: Akina |
![]()
|
|
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Прошу строго не судить.
Собственно история такая. Нужно отобрать записи, у которых хотя бы одна позиция имеет поле Статус = 2, а все остальные Статус = 1 или 4. Но это ладно, поизвращался с подчиненными запросами и худо-бедно нужные записи отбираются. Получился вот такой громоздкий запрос.
И хрен бы с ним, громоздкий или негромоздкий я бы так его и оставил, только нарисовалось ещё одно условие, исключить из выборки записи, у которых Статус=2. Посоветуйте как быть? чтоб ещё и это условие соблюсти. P.S. Неужто придётся ещё один подзапрос писать, с условием типа: Max(Статус)<>2 and Min(Статус)<>2 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
А можно всё то же, но более вменяемо? ни хрена ж не понять...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Нда, с выражовыванием мысли у меня явные проблемы. Попробую снова. Есть две таблицы: Заказы и Журнал. В Заказы естественно лежат записи заказов. В Журнал находятся позиции заказов (или можно сказать товары) связь с Заказы обеспечивается полем Код_Заказы, каждая позиция заказа имеет определенный статус (поле Статус), к примеру если позиция обсчитана Статус=1 и т.д. Дальше всё касается только таблицы Журнал, табл. Заказы в запросе не нужна: В запросе необходимо из табл. Журнал отобрать записи, у которых хотя бы одна позиция (по отношению к Заказы) имеет статус 2, а все остальные позиции заказа со статусом 1,4 (статус может быть и 0 и 3, но эти эти позиции выборке не подлежат). И тут самое интересное, если все позиции заказа имеют Статус=2, то эти записи тоже выборке не подлежат. ...Надеюсь предысторию написал внятно. Собственно с моего истерического написания первого поста утекло немало времени и получился вот такой запрос.
Возможно может показаться зачем вот так через одно место выбирать записи, но повторюсь, что позиции (товары) какого то заказа рассматривать нужно в совокупности. К примеру заказ 1, смотрим его позиции, их 5 штук, статусы позиций 1, 2, 3, 2, 4. Получается что позиции этого заказа в выборку попадают, отсекается только позиция со статусом 3. Например заказ 2, позиций 3 шт, их статусы 1, 4, 1. Позиции этого заказа в выборку не попадают, т.к. нет ни одной позиции со статусом 2. С таким множеством условий, которые нужно соблюсти в запросе столкнулся в первый раз, прошу его оценить, может есть более рациональное решение. P.S. Пока писал, подумал, а если статусы позиций заказа только 2 и 3... надо дальше думать. Это сообщение отредактировал(а) Woodlin - 11.8.2011, 06:56 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Возможно, потребуется обёртка... Это сообщение отредактировал(а) Akina - 11.8.2011, 09:32 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Woodlin |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 188 Регистрация: 15.7.2009 Где: Челябинская облас ть, г. Пласт Репутация: 1 Всего: 1 |
Akina, использовал Ваш пример, и должен сказать... Я В ШОКЕ!!! как оказывается просто и эффективно можно решить задачу.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Вы просто забыли о сути SQL, отдавшись логике... переведите запрос на русский язык: Выбрать всё из database, сгруппированное по order и имеющее суммарно status=2 больше нуля и status=1 либо 4 больше нуля. Ведь это по сути постановка задачи, но написанная просто, ясно и понятно, без лишних слов... если сначала вот так поставить задачу, а потом перевести на английский - запрос практически готов, только немножко допилить до синтаксиса конкретного SQL-диалекта. PS. Ещё логичнее было вместо sum(iif(status=2; 1; 0)) > 0 попробовать count(status=2) > 0 - но мне было лень проверять, понравится ли это Аксессу. Это сообщение отредактировал(а) Akina - 11.8.2011, 11:26 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "MS Access" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MS Access | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |