Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Вопрс по запросу (перекресный запрос - если запрос пустой)  [new]
uvers
Member

Откуда:
Сообщений: 316
Привет всем.
У меня несколько вопросов к уважаемым знатокам.
Сделал я перекресный запрос .Все хорошо,но вот проблема в том что если запрос пустой то как вы знаете выходит только таблица

Вопрос :
А можно ли сделать так чтобы если по запросу ничего не найдено,выходила бы пустая строка заполненая нулями.
20 сен 06, 22:05    [3164436]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Basill
Member

Откуда:
Сообщений: 29
прежде всего нужно ответить на вопрос: "зачем это нужно?"
21 сен 06, 08:39    [3165144]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
uvers
Member

Откуда:
Сообщений: 316
Нужно это за тем:запрос участвует в расчетах .От его значений вычитаются
значения другого запроса.Если результат запроса пустой, то выдает "ошибку 13"
Я пробывал через NZ исправить эту ошибку,не получилось.Nz срабатывает если
в результе запроса есть хотя бы 1 результат.Так же пробывал через Iif-тоже ничего не получилось.Если есть друе пути для исправления этой ошибки,то подскажите.
21 сен 06, 14:26    [3167866]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Тогда вам источник данных для перекрестного запроса нужно делать на RIGHT JOIN с использованием Nz(...). Будет большой перекрестный запрос с нулями.
21 сен 06, 14:29    [3167889]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
uvers
Member

Откуда:
Сообщений: 316
Прошу прощения,а "делать на RIGHT JOIN"-это как.С этого момента можно поподробней.
21 сен 06, 15:10    [3168240]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Вам можно сделать так, чтобы в источнике для перекрестноо запроса уже был полный набор записей для последующего вычитания из другого запроса. Т.е. чтобы множество ключей было такое же как в том другом запросе. Для этого и служит соединение таблиц с помощью RIGHT JOIN
TabA RIGHT JOIN TabB - будут взяты все записи из TabA и те из TabB, которым удалось соединться с TabA по ключам. Для тех из TabA котрые повисли без данных из TabB будут проставлены NULL значения. Их можно Nz превратить в нолики.
21 сен 06, 15:15    [3168279]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
uvers
Member

Откуда:
Сообщений: 316
Ну я вроде так и сделал.Создал простой запрос на выборку нужных данных из нужных таблиц.По нему сделал перекреснй,а по перекресному запрос на преобразование пустых клеток в нули т.е вот так --"Январь:nz([янв];0)"
Я правильно понимаю?
21 сен 06, 15:33    [3168436]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Если как вы пишите корень зла в том, что перекрестный запрос не возвращает записи, то неважно как вы что преобразовываете в записях, которых нет.

Либо при вычитании надо делать райт джойн либо до перекрещивания, в запросе, котрый используется для перекрестного.
21 сен 06, 15:37    [3168465]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
uvers
Member

Откуда:
Сообщений: 316
А может действительно я не правильно понимаю причину своей проблемы?
Еще раз попытаюсь объяснить что я хочу:
Есть данные для перекресного запроса(отдельный запрос),есть сам перекр. запрос
Данные для перекр. запроса отбираются по условию (в запросе условие Between ...And).Выбираю все оплаты клиента каторые поступили с начала года по текущий месяц.Я так понимаю что проблема в использовании "Between" т.к в результат запроса не входят клиенты у каторых нет ниодной оплаты,а я пытаюсь их вывести в форму(соответственно ошибка 13).Если отказываюсь использовать условие в запросе , сбиваются все расчеты(зато пропадает ошибка 13). Что еще можно использовать вместо "Between" чтобы отбор производился т.к написано выше и как
быть с теми клиентами у каторых нет оплат?
26 сен 06, 16:02    [3185925]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Либо вы RIGHT JOIN'ом организуете себе результат с пустыми полями;

Либо перед выполнением перекрестного запроса делаете проверку и если в заданном диапазоне дат совсем нет данных - ну ни по одному клиенту, то матом кричите об этом пользователю в MsgBox'е и не показываете форму.
26 сен 06, 16:21    [3186109]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
uvers
Member

Откуда:
Сообщений: 316
Нули я организовал только не через левое соединение ,а через правое ,не помагло.
А как я должен организовать проверку результатов запроса?
26 сен 06, 17:02    [3186455]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Dcount'ом или запросом SELECT COUNT(...) ...
27 сен 06, 08:58    [3188084]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу (перекресный запрос - если запрос пустой)  [new]
uvers
Member

Откуда:
Сообщений: 316
Если я правильно понял,то "SELECT COUNT(...)" подсчитает мне кол-во строк в результате запроса и если результат = 0,то MsgBox...Но ведь в результате могут быть результаты,но клиента которого запрашиваю нет.Как быть в этом случае?
27 сен 06, 12:22    [3189736]     Ответить | Цитировать Сообщить модератору
 Re: Вопрс по запросу (перекресный запрос - если запрос пустой)  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Если в таблице данных/запросе на который вы напускаете PIVOT для заданного клиента в заданном диапазоне дат нет данных (COUNT=0) то перекрестный запрос должен вернуть пустую таблицу без записей.
27 сен 06, 12:34    [3189876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить