LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Проблема с запр...
 Проблема с запросами.
 
 16.04.2008 11:15:37
Kokubunji
17 сообщения


Проблема с запросами.
Имеются:
Таб1
А - А1
Б - Б1
Г - (пусто)

Таб2
А -
Б -
В -
Г -

В Таб2: А, Б.. - искомые значения, которые совпадают со значениями А, Б.. из Таб1.

Задача: Выдать что-то типа:
Таб3
А- А1
Б - Б1
В - (пустая ячейка или какой-нибудь знак ошибки)
Г - (пусто, т.к. и в Таб1 пусто)

Т.е. при стандартном запросе на выборку (JOIN (Left, Right и т.д.), он не выводит поле В, т.к. этого значения нет в Таб1 (но есть в Таб2).

При тех же условиях в Excel'e (ВПР) - выводилась ошибка (#Н\Д).

Помогите пожалуйста с проблемой.
 16.04.2008 13:33:30
Admin1
731 сообщения
1-ый


Re: Проблема с запросами.

Функцию nz надо применять для контроля пустых значений. А по этой теме был вопрос.  Решается так.  

SELECT Таблица1.Номер, Таблица1.Поле1, Таблица1.Поле2, nz(Таблица2.Поле4,"-") AS Поле4, nz(Таблица2.Поле5,"-") AS Поле5
FROM Таблица1 LEFT JOIN Таблица2 ON Таблица1.Номер = Таблица2.Номер

UNION SELECT Таблица2.Номер, nz(Таблица1.Поле1,"-") AS Поле1, nz(Таблица1.Поле2,"-") AS Поле2, Таблица2.Поле4, Таблица2.Поле5
FROM Таблица1 RIGHT JOIN Таблица2 ON Таблица1.Номер = Таблица2.Номер;

 17.04.2008 13:21:32
Kokubunji
17 сообщения


Re: Проблема с запросами.
Как я понимаю (извините, но я только начал изучать Access), тут нужно прописывать все строки в таблицах при создании запроса.
Но проблема в том, что базы содержат от 5 до 20 тыс строк и десяток столбцов.

Прописывать для каждой строки - смерти подобно. Легче дальше использовать ВПР, работая в Excel'e.

Я как-то похимичил и получил следующее (Работаю в 2007):

Мастер Запросов - Записи без подчиненных - Выбираю две таблицы и связь между ними и какие поля выводить - Открываю запрос в конструкторе и удаляю "Is Null" в "Условиях отбора" - Добавляю базы - Выбираю нужные столбцы - Открываю SQL и меняю все INNER JOIN на Left JOIN.

Более или менее получается то, что хотел. Однако, обязательно одно из полей - сменит название на "Expr1011" и выдавать в нем те же данные, что и в следующем столбце.

По большому счету, мне нужна точная копия функции ВПР (ВПР(искомое_значение;таблица;номер_столбца;интервальный_просмотр)) т.е.

=ВПР(искомое_значение;таблица;номер_столбца;0(точное совпадение)), но для Access'a и чтоб не проглатывал строки, как при стандартном запросе на выборку (когда не находит это искомое значение в других базах).

Поправьте меня пожалуйста, если я где-то ошибся. И еще раз спасибо за помощь.
 17.04.2008 13:33:56
Admin1
731 сообщения
1-ый


Re: Проблема с запросами.
 Измененный Admin1  на 17.04.2008 13:34:17)

Правильно выбрано решение. Далее дано использовать AS для переименования Expr1011 в нужное поле, nz для проверки нулевых значений и подстановки в запрос нужной строки. В примере в поле, где нет данных ставиться -

 17.04.2008 14:04:18
Kokubunji
17 сообщения


Re: Проблема с запросами.
Извините, голова не работает уже. Не поле (ячейка) меняется на "Expr1011", а наименование столбца, а ячейки в нем начинают дублировать данные из следеющего столбца справа.

При моей "химии" пустые ячейки - остаются пустыми. Мне кажется, что это лучше, чем прописывать nz для 1000 строк в 10 связанных базах, которые могут потом обновляться.. где-то заполняться, а где-то очищаться.

А можно ли nz прописать сразу для всей таблицы\запроса? Т.е. диапазона?

P.S. Спасибо большое, вы мне очень помогли.
  Программирование  Microsoft Access. Файлы mdb и accdb  Проблема с запр...
ПоискПоиск  Список форумовСписок форумов  
right