выборка записей по критериям

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

выборка записей по критериям

Сообщение psv_nko » 17.03.2010 (Ср) 20:49

Доброго времени суток. Подскажите, пожалуста, как правильно создать запрос SQL, который, в зависимости от критериев, заданных в форме-фильтре, выбирал бы все или какой-то определенный тип записей.
Например, есть форма-фильтр, в которой указывается какие платежи надо отобразить: наличные, безналичные или все. Какой-то один из типов отображается, а все - нет.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: выборка записей по критериям

Сообщение alibek » 17.03.2010 (Ср) 23:14

А попытки решить вопрос предпринимались?
Lasciate ogni speranza, voi ch'entrate.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: выборка записей по критериям

Сообщение FireFenix » 18.03.2010 (Чт) 2:09

T-SQL + WHERE, LIKE, ORDER, GROUP etc
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 18.03.2010 (Чт) 8:56

да, предпринимались:
1. в конструкторе запроса ставил условие iif([forms]![filter]![группа переглючателей]=1;0;iif([forms]![filter]![группа переглючателей]=2;1;<2)) - на это условие не ругался аксес, отрабатывал только определенный тип платежа;
iif([forms]![filter]![группа переглючателей]=1;0;iif([forms]![filter]![группа переглючателей]=2;1;like"*")) - ругается, говорит,что условие слишком сложное
2. исходные данные я беру с сервера MySQL, поэтому попытался сделать запрос к серверу с использованием функции REGEXP в конструкции IF, получилось, но данный вариант мне не подходит, а эту функцию аксес не понимает.
3. ставил фильтр на запрос посредством VBA, работает, но использовать этот запрос в формах не удается - записи отображаются без учета фильтра.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: выборка записей по критериям

Сообщение alibek » 18.03.2010 (Чт) 9:32

WHERE [field] = NZ([param],[field])
Lasciate ogni speranza, voi ch'entrate.

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 18.03.2010 (Чт) 18:22

alibek писал(а):WHERE [field] = NZ([param],[field])


WHERE [billing_clients].[type_payment] = NZ([forms]![filter]![Группа],[billing_clients].[type_payment]) - не работает, результат такой же как и с iif, выбирает или нал или безнал, при попытке выбрать все типы платежей отображает 0 записей.

может я не правильно понял инструкцию функции NZ, но она и не должна была работать в моем случае, так как [forms]![filter]![Группа] у меня не является NULL, [forms]![filter]![Группа] может выдавать числа 1,2 или 3.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: выборка записей по критериям

Сообщение alibek » 18.03.2010 (Чт) 22:06

Если 3 — это все типы, то ты сам усложнил себе задачу. Пусть будет NULL — все типы.
Либо пиши аналог функции TSQL NULLIF и заменяй 3 на NULL.
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: выборка записей по критериям

Сообщение iGrok » 18.03.2010 (Чт) 22:32

Если 3 - это все типы, можно поступить немного проще.
Достаточно вспомнить, что 1 OR 2 = 3, а 1 AND 3 = 1 и 2 AND 3 = 2.

Т.е., если не ошибаюсь с синтаксисом и твой провайдер это вообще поддерживает, будет что-то типа WHERE [billing_clients].[type_payment] & [forms]![filter]![Группа]

По крайней мере мускул такую конструкцию вполне понимает.

UPD: Конечно же не AND, а &.
label:
cli
jmp label

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 18.03.2010 (Чт) 22:58

alibek писал(а):Если 3 — это все типы, то ты сам усложнил себе задачу. Пусть будет NULL — все типы.
Либо пиши аналог функции TSQL NULLIF и заменяй 3 на NULL.


я пробовал присвоить всем типам Null, не дает аксесс присваивать группе переключателей значения, отличные от числовых

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 18.03.2010 (Чт) 23:15

iGrok писал(а):Если 3 - это все типы, можно поступить немного проще.
Достаточно вспомнить, что 1 OR 2 = 3, а 1 AND 3 = 1 и 2 AND 3 = 2.

Т.е., если не ошибаюсь с синтаксисом и твой провайдер это вообще поддерживает, будет что-то типа WHERE [billing_clients].[type_payment] & [forms]![filter]![Группа]

По крайней мере мускул такую конструкцию вполне понимает.

UPD: Конечно же не AND, а &.


не прокатило, вываливает всегда все записи, не зависимо от значения группы переключателей

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 18.03.2010 (Чт) 23:52

все оказалось на много проще:
iif([forms]![filter]![группа переглючателей]=3,[billing_clients].[type_payment],[forms]![filter]![группа переглючателей])

большое спасибо, iGrok и alibek, натолкнули на решение проблемы и по ходу наковырял ответы на другие вопросы :D

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: выборка записей по критериям

Сообщение HandKot » 19.03.2010 (Пт) 8:26

если я правильно понял и
1 - выдать наличные платежи
2 - выдать безналичные платежи
3 - выдать все платежи

то конструкция такая

Код: Выделить всё
where [billing_clients].[type_payment] = [forms]![filter]![группа переглючателей] OR [forms]![filter]![группа переглючателей] = 3



PS: как OR пишется в MySQL уточните сами
Ваше решение дает тотже результат
I Have Nine Lives You Have One Only
THINK!

psv_nko
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 12.04.2005 (Вт) 15:01
Откуда: tula

Re: выборка записей по критериям

Сообщение psv_nko » 19.03.2010 (Пт) 11:03

Код: Выделить всё
where [billing_clients].[type_payment] = [forms]![filter]![группа переглючателей] OR [forms]![filter]![группа переглючателей] = 3



и так работает.
спасибо


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29

    TopList