Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с запросом на выборку! / 12 сообщений из 12, страница 1 из 1
29.11.2004, 18:52:50
    #32804734
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Таблицы "Заказ", "Состав заказа", "Склад".
"Состав заказа" содержит артикулы по каждому Заказу.
Каждая ее запись связана с таблицей "Склад".
В табл. "Склад" есть поле "ДатаСклада". В нем либо дата прихода артикула, либо Null. Артикулы одного Заказа могут иметь одинаковую "ДатаСклада"(пришли одновременно), разные даты(пришло все, но частями), даты + Null(что-то еще не пришло), Null(ничего не пришло).
Надо сотворить запрос, который показывал бы состояние Заказа на произвольную дату выборки. Т.е типа "пришел весь", "не весь", "не пришел".
Бился пол-дня, ничего не выходит.
...
Рейтинг: 0 / 0
30.11.2004, 09:14:51
    #32805064
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Запрос буду делать без учета склейки таблиц, считаю что для этого есть отдельный сохраненный запрос z1 (id_zakaz, artikul)

z2:
Код: plaintext
1.
2.
Select id_zakaz, count( 1 ) as zakaz_cnt, sum(iif(isnull(artikul),  0 ,  1 ) as real_cnt
from z1
group by id_zakaz

z3:
Код: plaintext
1.
Select id_zakaz, iif(real_cnt =  0 , 'пустой', iif(real_cnt = zakaz_cnt, 'полный', 'частичный')) as sost
From z2

?
...
Рейтинг: 0 / 0
30.11.2004, 09:15:45
    #32805067
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
PS: В z2 закрывающей скобки не хватает
...
Рейтинг: 0 / 0
30.11.2004, 15:57:20
    #32806074
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Что-то не выходит.
Не понял каким должен быть исходный запрос Z1?
Урезанная таблица "Состав заказа":
3 поля составного ключа(связь с "Заказы"), Артикул, IDСклад(связь с "Склад").
Урезанная таблица "Склад":
IDСклад, ДатаСклада.
Выражение isnull(artikul) никогда не равно Null - каждая запись "Состав заказа" уж артикул точно содержит...
...
Рейтинг: 0 / 0
30.11.2004, 17:31:56
    #32806351
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Пардон, замени артикул на [ДатаСклада]

Т.е. - идея такая
В z2 я считаю реальное число позиций заказа и уже пришедшее число позиций,
а в z3 просто сравниваю эти 2 числа!

PS: не надо пытаться тупо копировать запрос и уповать на его работоспособность, т.к.:
1. на форуме все люди, а людям как известно свойственно ошибаться
2. вы понимаете суть своей проблемы, а читающий может и не все понять (или не до конца) - в связи с чем увеличивается вероятность ошибки
3. у нас нет ваших данных, следовательно мы не можем всесторонне проверить работоспособность запросов - из чего следует, что запросы часто пишутся на "коленке"
...
Рейтинг: 0 / 0
01.12.2004, 13:31:06
    #32807564
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
C принципом отбора разобрался - спасибо!
А к чему дату выборки присобачить?
Если отбирать только по ДатаСклада, то в отобранное попадают все записи, где это поле равно Null.
Надо добавить еще условие ЗаказДата <= Дата выборки, чтоб не вылезали "будущие" заказы, так что-ли?
...
Рейтинг: 0 / 0
01.12.2004, 13:39:38
    #32807581
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
C принципом отбора разобрался - спасибо!
А к чему дату выборки присобачить?
Если отбирать только по ДатаСклада, то в отобранное попадают все записи, где это поле равно Null.
Надо добавить еще условие ЗаказДата <= Дата выборки, чтоб не вылезали "будущие" заказы, так что-ли?
...
Рейтинг: 0 / 0
01.12.2004, 16:49:47
    #32808042
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
А вот отбор по ДатаСклада напрочь губит такой красивый способ:
z2 (c учетом исправлений):
Код: plaintext
1.
2.
Select id_zakaz, count( 1 ) as zakaz_cnt, sum(iif(isnull(ДатаСклада),  0 ,  1 ) as real_cnt
from z1
group by id_zakaz
при этом запрос z1 выглядел так:
Код: plaintext
1.
Select СоставЗаказа.id_zakaz, СоставЗаказа.artikul, Склад.ДатаСклада
FROM Склад RIGHT JOIN СоставЗаказа ON Склад.IDСклад = СоставЗаказа.IDСклад
Если теперь в запросе z1 добавить условие: ДатаСклад <= ДатаОтбора, то пропадут какие-то строки, соответственно в запросе z2 будет неправильно считаться выражение Count(1), ну и дальше пойдут ошибки.
И опять я вернулся к своему разбитому корыту!!!
...
Рейтинг: 0 / 0
01.12.2004, 17:54:23
    #32808234
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
авторЕсли теперь в запросе z1 добавить условие: ДатаСклад <= ДатаОтбора, то пропадут какие-то строки, соответственно в запросе z2 будет неправильно считаться выражение Count(1), ну и дальше пойдут ошибки.
И опять я вернулся к своему разбитому корыту!!!
Код: plaintext
(ДатаСклад <= ДатаОтбора) Or (ДатаСклад Is Null)
?
...
Рейтинг: 0 / 0
01.12.2004, 18:07:56
    #32808271
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Зацените, получается монстр:
запрос z1
Код: plaintext
1.
Select СоставЗаказа.id_zakaz, СоставЗаказа.artikul, Склад.ДатаСклада
FROM Склад RIGHT JOIN СоставЗаказа ON Склад.IDСклад = СоставЗаказа.IDСклад
запрос z2, число строк в Заказе
Код: plaintext
1.
2.
Select id_zakaz, count( 1 ) as zakaz_cnt
from z1
group by id_zakaz
запрос z11,как z1, но с отбором по дате
Код: plaintext
1.
2.
Select СоставЗаказа.id_zakaz, СоставЗаказа.artikul, Склад.ДатаСклада
FROM Склад RIGHT JOIN СоставЗаказа ON Склад.IDСклад = СоставЗаказа.IDСклад
WHERE [ДатСклада]<= дата отбора
запрос z21, число строк в возможно урезанном Заказе
Код: plaintext
1.
2.
Select id_zakaz, count( 1 ) as zakaz_cnt
from z11
group by id_zakaz
итоговый запрос
Код: plaintext
1.
2.
SELECT z2.id_zakaz, [z2]![zakaz_cnt]-nz([z21]![zakaz_cnt],[z2]![zakaz_cnt]+ 1 ) AS qwerty,
 IIf([qwerty]> 0 ,'часть',IIf([qwerty]=-1,'пусто','весь')) AS Выражение1
FROM z21 RIGHT JOIN z2 ON z21.id_zakaz = z2.id_zakaz
может чего упростить можно?
...
Рейтинг: 0 / 0
01.12.2004, 18:09:44
    #32808278
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
И так нормально :)
...
Рейтинг: 0 / 0
01.12.2004, 18:10:46
    #32808284
Benzin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на выборку!
Конечно:
Код: plaintext
(ДатаСклад <= ДатаОтбора) Or (ДатаСклад Is Null)
, но только это не спасает, пришлось сотворить "монстра"
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с запросом на выборку! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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