powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / выборка из одной таблицы
19 сообщений из 19, страница 1 из 1
выборка из одной таблицы
    #32559996
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблицаГруппы: IdГруппы, ДатаПриезда, ДатаОтъезда

хочется отчет:
на определенную дату приезда указана сумма групп, у которых разница между датами больше 10 дней и сумма групп, у которых разница между датами меньше 10

пока удается сделать только какой-нибудь один из вариантов, а вот так, чтоб оба в одном запросе - фиг 8(

чую, что нужен подчиненный запрос, но как ни пробовал, не выходит

вот
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560009
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясное дело - не получится в одном запросе, т.к. критерии расчета противоречат друг-другу. Но вполне возможно все сложить, если сначала запросить по отдельности на определенную дату приезда сумму групп, у которых разница между датами больше 10 дней и сумму групп, у которых разница между датами меньше 10 (кстати, а если равно 10, то к какой группе относится?) и затем эти отчеты объеденить. Тоже, в общем-то не понятно, как ты хочешь их объеденить? Юнион напрвшивается. Т.е. примерно так:

select Count(IdГруппы) as A from ТаблицаГруппы where ДатаОтъезда - ДатаПриезда > 10
union
select Count(IdГруппы) as A from ТаблицаГруппы where ДатаОтъезда - ДатаПриезда < 10

??
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560660
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не получается
видимо, с юнионом я плохо дружу 8(
он вообще какой-то бред выдает
чтобы получить группы, которые живу больше 10 дней, я делаю так:

SELECT Hotels.hotelName, Count(Groupes.groupId) AS [Count-groupId]
FROM Hotels INNER JOIN Groupes ON Hotels.hotelId=Groupes.groupHotelName
WHERE (((Groupes.groupDateArrive)>=Forms!frmNomera2!Text1 And (Groupes.groupDateArrive)<=Forms!frmNomera2!Text3) And (((Groupes!groupDateDepar)-(Groupes!groupDateArrive))>10) And ((Groupes.groupAnnulee)=0))
GROUP BY Hotels.hotelName, Hotels.hotelId
HAVING (((Hotels.hotelId)=Forms!frmNomera2!roll13));

Тут еще Отель приплелся. Юзер в форме вводит имя отеля и две даты - начальную и конечную.
Как сюда юнион привязать? Хотчется, чтобы в соседнем поле была еще выборка для тех групп, которые живут менее 10 дней
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560703
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стало немного яснее, поскольку появились гостиницы. Ты хочешь получить имя отеля, номер группы и поле в котором надо указать больше 10 дней или меньше 10 живет группа от определенного дня приезда.
Теперь, если клиент вводит отель, то показать все группы проживающие в нем,
если вводит даты - все группы и отели между этими датами, а если и то и другое - группы проживающие в отеле между этими датами. Правильно я понимаю?

В первом случае запрос мне видится так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT Hotels.hotelName, Query1.groupHotelID, Query1.Note
FROM Hotels INNER JOIN (SELECT Groupes.groupHotelID, Groupes.groupId, ">10" AS [Note]
FROM Groupes
WHERE ((([groupDateDepar]-[groupDateArrive])> 10 ))
GROUP BY Groupes.groupHotelID, Groupes.groupId 
) as Query1 ON Hotels.hotelId = Query1.groupHotelID 
UNION
SELECT Hotels.hotelName, Query2.groupHotelID, Query2.Note
FROM Hotels INNER JOIN (SELECT Groupes.groupHotelID, Groupes.groupId, "<10" AS [Note]
FROM Groupes
WHERE ((([groupDateDepar]-[groupDateArrive])< 10 ))
GROUP BY Groupes.groupHotelID, Groupes.groupId 
) as Query2 ON Hotels.hotelId = Query2.groupHotelID 

С определенным отелем в запрос добавится в конце
where hotelId = 1 (Forms!frmNomera2!roll13)

А вот с датами у меня сомнеие. Первую можно выбрать, но вторая будет противоречить условию больше / меньше 10
Так что с первой датой запрос изменится в WHERE
WHERE ((([groupDateDepar]-[groupDateArrive])<10) And (groupDateArrive = [Date])) and
WHERE ((([groupDateDepar]-[groupDateArrive])>10) And (groupDateArrive = [Date]))
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560714
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pretorianвидимо, с юнионом я плохо дружу 8(Юнион - бесконечно простая штука. Создаёшь (хоть конструктором) сколько тебе надо запросов. Потом копируешь их SQL-текст и вставляешь в один запрос, чередуя словом UNION. Телемаркет. Результирующая выборка включит в себя все частные выборки.
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560730
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Rivkin Dmitry
хех, я бы в своем проекте так разбирался, как ты с первого раза! 8)
делал, как ты говоришь, но, видимо, постоянно путаю синтаксис, и ничего не выходит
зато у меня вышло с подчиненными запросами 8)
ставил синтаксис наобум просто, НУ НЕ ПОНИМАЮ Я ЕГО 8))))
в итоге так:

SELECT Hotels.hotelName, (select count( [Groupes]![groupId] ) FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName WHERE (((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))<7) and ((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0)) HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]))) AS menshe7, (select count( [Groupes]![groupId] ) FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName WHERE (((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))=7) and ((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0)) HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]))) AS ravno7, (select count( [Groupes]![groupId] ) FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName WHERE (((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))>=8) and ((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))<=13) and ((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0)) HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]))) AS ot8do13, (select count( [Groupes]![groupId] ) FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName WHERE (((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))=14) and ((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0)) HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]))) AS ravno14, (select count( [Groupes]![groupId] ) FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName WHERE (((([Groupes]![groupDateDepar])-([Groupes]![groupDateArrive]))>14) and ((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0)) HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]))) AS bolshe14
FROM Hotels INNER JOIN Groupes ON Hotels.hotelId = Groupes.groupHotelName
WHERE (((Groupes.groupDateArrive)>=[Forms]![frmNomera2]![Text1] And (Groupes.groupDateArrive)<=[Forms]![frmNomera2]![Text3]) AND ((Groupes.groupAnnulee)=0))
GROUP BY Hotels.hotelName, Hotels.hotelId
HAVING (((Hotels.hotelId)=[Forms]![frmNomera2]![roll13]));

8))
хехе
страшно?
ну, не знаю, как тебе, а мне страшно 8)
но тут просто много подчиненных и много новых разных условий (больше 10 я приводил в качестве примера)
буду все-таки с юнионом разбираться
а то ведь интересно же 8)

2маяк
да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле)
потом небось можно замучится, вставляя это в отчет......
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560731
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, господа, за поддержку
мега-полезное тут место, малинное 8)
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560739
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, теперь в твоем запросе черт ногу сломит!!!
Давй-ка вот что сделаем. Подробненько распиши свою задачку (пока будешь писать (ударение ), глядишь, и понимать начнешь свой проект. Дальше, кинь структуру твоих таблиц, да немножко комментариев к ним. Свои предположения по поводу создания формы...
И ничего (ничегошеньки!!!) не делай на обум! Во-первых, это не продуктивно, во-вторых, может показаться, что заработало, но потом ты из этого не выйдешь. Не понимаешь - ищи в хелпе, в интернете, но не трать зря время!

Ну а мы, чем сможем, поможем...
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560744
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pretorian2маяк
да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле)
потом небось можно замучится, вставляя это в отчет......А что тебе надо? Юнионом ты получишь совершенно нормальный рекордсет, который потом можешь засунуть хоть в борщ, хоть в отчёт.
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32560775
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маяк Pretorian2маяк
да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле)
потом небось можно замучится, вставляя это в отчет......А что тебе надо? Юнионом ты получишь совершенно нормальный рекордсет, который потом можешь засунуть хоть в борщ, хоть в отчёт.

маяк, рецептик борща не подаришь?
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561027
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помимо паренья с одним запросом иногда можно упростить задачу и воспользоваться подчиненными отчетами
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561040
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Rivkin Dmitry

Запрос конечно громоздкий (по сей причине подробно в нем не разбирался)
Но вот одного не понял :(

Нужно выбрать все записи с некоторым условием + продолжитнльность проживания (ПП) > 10 дней
И выбрать все записи с тем же условием + ПП < 10?
И на кой тут UNION?
Я так понял что надо выбрать все записи с условием + ПП <> 10 ? (Или этот +, вообще, не нужен?)

Где тут Union я вас спрашиваю???

PS: может я тормоз?
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561058
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome - ты как всегда - предлесть - зришь в корень! Как это я не обратил внимание? Но если я правильно понял его задачу, то нужно все же разделить
<10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 . Но парень еще не разобрался в постановке :)
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561060
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitrypaparome - ты как всегда - предлесть - зришь в корень! Как это я не обратил внимание? Но если я правильно понял его задачу, то нужно все же разделить
<10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 . Но парень еще не разобрался в постановке :)

А что - iif уже отменили?

Код: plaintext
iif(a< 10 , "<10", ">=10") as xxx
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561113
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сдаюсь! Но пусть он все же уточнит задачку-у-у-у-у
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561526
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ого, сколько народу!
я рад 8)

2Rivkin Dmitry
спасибо 8)
ну, структура, соббсно, основная уже вся на виду
наобум приходится в основном с синтаксисом, ибо Акс слишком мало инфы выдает в диалоговых окнах ошибки
а отчет, между прочим, работает! 8) и выдает то, что надо
подчиненными сделал, как видишь

"Но если я правильно понял его задачу, то нужно все же разделить
<10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 ."
Да, вроде все так.

2paparome
не очень понял формулу
но, похоже, это серьезное упрощение моего огромного запроса (с кучей подчиненных)
я прав?

2Alexander G
супер-наглядно
это, пожалуй, лучшее решение
пасиб 8)
просто я не сталкивался еще с подчиненными отчетами
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561539
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pretorianнужно все же разделить
<10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 ."Нормальный программист воспримет это описание как "отделить всё, где '10' от того, где не '10'". А нужно тебе, я так понимаю, в одну строчку сумму всех значений, где меньше 10, а в другую - всех, где больше. Так?
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32561549
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
2paparome 
не очень понял формулу
но, похоже, это серьезное упрощение моего огромного запроса (с кучей подчиненных)
я прав?

Я сам мало что понял :(
Ну не мой это конек, разбираться в сложных запросах :(
Я просто решил уточнить у Rivkin Dmitry, зачем ему UNION понадобился :)
...
Рейтинг: 0 / 0
выборка из одной таблицы
    #32562377
Pretorian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2маяк
ДА!

2paparome
похоже, юнион и правда не нужен
хотя бы потому, что он у меня вообще не работает 8))))
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / выборка из одной таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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