|
|
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
ТаблицаГруппы: IdГруппы, ДатаПриезда, ДатаОтъезда хочется отчет: на определенную дату приезда указана сумма групп, у которых разница между датами больше 10 дней и сумма групп, у которых разница между датами меньше 10 пока удается сделать только какой-нибудь один из вариантов, а вот так, чтоб оба в одном запросе - фиг 8( чую, что нужен подчиненный запрос, но как ни пробовал, не выходит вот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 07:14 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Ясное дело - не получится в одном запросе, т.к. критерии расчета противоречат друг-другу. Но вполне возможно все сложить, если сначала запросить по отдельности на определенную дату приезда сумму групп, у которых разница между датами больше 10 дней и сумму групп, у которых разница между датами меньше 10 (кстати, а если равно 10, то к какой группе относится?) и затем эти отчеты объеденить. Тоже, в общем-то не понятно, как ты хочешь их объеденить? Юнион напрвшивается. Т.е. примерно так: select Count(IdГруппы) as A from ТаблицаГруппы where ДатаОтъезда - ДатаПриезда > 10 union select Count(IdГруппы) as A from ТаблицаГруппы where ДатаОтъезда - ДатаПриезда < 10 ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 09:04 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
не получается видимо, с юнионом я плохо дружу 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 дней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 19:01 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Стало немного яснее, поскольку появились гостиницы. Ты хочешь получить имя отеля, номер группы и поле в котором надо указать больше 10 дней или меньше 10 живет группа от определенного дня приезда. Теперь, если клиент вводит отель, то показать все группы проживающие в нем, если вводит даты - все группы и отели между этими датами, а если и то и другое - группы проживающие в отеле между этими датами. Правильно я понимаю? В первом случае запрос мне видится так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. С определенным отелем в запрос добавится в конце where hotelId = 1 (Forms!frmNomera2!roll13) А вот с датами у меня сомнеие. Первую можно выбрать, но вторая будет противоречить условию больше / меньше 10 Так что с первой датой запрос изменится в WHERE WHERE ((([groupDateDepar]-[groupDateArrive])<10) And (groupDateArrive = [Date])) and WHERE ((([groupDateDepar]-[groupDateArrive])>10) And (groupDateArrive = [Date])) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:08 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Pretorianвидимо, с юнионом я плохо дружу 8(Юнион - бесконечно простая штука. Создаёшь (хоть конструктором) сколько тебе надо запросов. Потом копируешь их SQL-текст и вставляешь в один запрос, чередуя словом UNION. Телемаркет. Результирующая выборка включит в себя все частные выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:22 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
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маяк да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле) потом небось можно замучится, вставляя это в отчет...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:36 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
спасибо, господа, за поддержку мега-полезное тут место, малинное 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:37 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Ну, теперь в твоем запросе черт ногу сломит!!! Давй-ка вот что сделаем. Подробненько распиши свою задачку (пока будешь писать (ударение ), глядишь, и понимать начнешь свой проект. Дальше, кинь структуру твоих таблиц, да немножко комментариев к ним. Свои предположения по поводу создания формы... И ничего (ничегошеньки!!!) не делай на обум! Во-первых, это не продуктивно, во-вторых, может показаться, что заработало, но потом ты из этого не выйдешь. Не понимаешь - ищи в хелпе, в интернете, но не трать зря время! Ну а мы, чем сможем, поможем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:50 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Pretorian2маяк да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле) потом небось можно замучится, вставляя это в отчет......А что тебе надо? Юнионом ты получишь совершенно нормальный рекордсет, который потом можешь засунуть хоть в борщ, хоть в отчёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 20:55 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
маяк Pretorian2маяк да, но я так понимаю, что вся выборка будет в столбце, а не в строке (поле) потом небось можно замучится, вставляя это в отчет......А что тебе надо? Юнионом ты получишь совершенно нормальный рекордсет, который потом можешь засунуть хоть в борщ, хоть в отчёт. маяк, рецептик борща не подаришь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 21:19 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Помимо паренья с одним запросом иногда можно упростить задачу и воспользоваться подчиненными отчетами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 10:03 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
2 Rivkin Dmitry Запрос конечно громоздкий (по сей причине подробно в нем не разбирался) Но вот одного не понял :( Нужно выбрать все записи с некоторым условием + продолжитнльность проживания (ПП) > 10 дней И выбрать все записи с тем же условием + ПП < 10? И на кой тут UNION? Я так понял что надо выбрать все записи с условием + ПП <> 10 ? (Или этот +, вообще, не нужен?) Где тут Union я вас спрашиваю??? PS: может я тормоз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 10:12 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
paparome - ты как всегда - предлесть - зришь в корень! Как это я не обратил внимание? Но если я правильно понял его задачу, то нужно все же разделить <10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 . Но парень еще не разобрался в постановке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 10:19 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Rivkin Dmitrypaparome - ты как всегда - предлесть - зришь в корень! Как это я не обратил внимание? Но если я правильно понял его задачу, то нужно все же разделить <10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 . Но парень еще не разобрался в постановке :) А что - iif уже отменили? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 10:21 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Сдаюсь! Но пусть он все же уточнит задачку-у-у-у-у ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 10:50 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
ого, сколько народу! я рад 8) 2Rivkin Dmitry спасибо 8) ну, структура, соббсно, основная уже вся на виду наобум приходится в основном с синтаксисом, ибо Акс слишком мало инфы выдает в диалоговых окнах ошибки а отчет, между прочим, работает! 8) и выдает то, что надо подчиненными сделал, как видишь "Но если я правильно понял его задачу, то нужно все же разделить <10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 ." Да, вроде все так. 2paparome не очень понял формулу но, похоже, это серьезное упрощение моего огромного запроса (с кучей подчиненных) я прав? 2Alexander G супер-наглядно это, пожалуй, лучшее решение пасиб 8) просто я не сталкивался еще с подчиненными отчетами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 13:39 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Pretorianнужно все же разделить <10 и >10 и не важно сколько точно дней должны жить 5 или 15, просто <10 или >10 ."Нормальный программист воспримет это описание как "отделить всё, где '10' от того, где не '10'". А нужно тебе, я так понимаю, в одну строчку сумму всех значений, где меньше 10, а в другую - всех, где больше. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 13:44 |
|
||
|
выборка из одной таблицы
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Я сам мало что понял :( Ну не мой это конек, разбираться в сложных запросах :( Я просто решил уточнить у Rivkin Dmitry, зачем ему UNION понадобился :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2004, 13:48 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1611&tid=1673837]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 357ms |

| 0 / 0 |
