Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Использование в SELECT ... WHERE вычисляемых полей  [new]
mosalova
Member

Откуда: Украина, Харьков
Сообщений: 29
всем привет!

есть ComboBox, в котором три значения: 'все', 'м', 'ж'.
переменной polMW присваивается значение, выбранное пользователем

Сейчас выборка по полу выполняется так:
IF polMW='м' OR polMW='ж'
   SELECT fio,pol,data FROM table1 WHERE pol=polMW INTO cursor1
ELSE
   SELECT fio,pol,data FROM table1 INTO cursor1    && все
ENDIF


А хочется сделать это одной строкой для любого варианта!

Как в WHERE pol= указать, что нужно выбирать все записи, если пользователь выберет 'все', типа
SELECT fio,pol,data FROM table1  WHERE pol=* INTO cursor1
13 дек 12, 19:05    [13628268]     Ответить | Цитировать Сообщить модератору
 Re: Использование в SELECT ... WHERE вычисляемых полей  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6901
lcSex=IIF(polMW='м' OR polMW='ж',polMW,'мж')
SELECT fio,pol,data FROM table1 WHERE pol $ lcSex INTO cursor1
* бесполых, к сожалению, не отберёт...
13 дек 12, 19:55    [13628455]     Ответить | Цитировать Сообщить модератору
 Re: Использование в SELECT ... WHERE вычисляемых полей  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Возможны, еще варианты

1. В качестве условия отбора можно указать просто логическую константу

SELECT fio,pol,data FROM table1 WHERE IIF(m.polMW='все', .T., pol=m.polMW) INTO cursor1


2. При настройке SET ANSI OFF (это настройка по умолчанию), сравнение символьных строк идет до окончания символов в самом коротком выражении. А это значит, что любая символьная строка будет равна пустой строке. Следовательно, для случая "все" надо подставить пустую строку (две кавычки подряд)

SELECT fio,pol,data FROM table1 WHERE pol = IIF(m.polMW='все', "", m.polMW) INTO cursor1


3. Если в таблице не может быть других значений кроме "М" и "Ж", то можно указать два условия, объединенных по OR или функцию Inlist() или директиву IN.

Local pol1, pol2
if m.polMW='все'
    pol1 = 'м' 
    pol2 = 'ж'
else
    store m.polMW to pol1, pol2
endif

SELECT fio,pol,data FROM table1 WHERE pol IN (m.pol1, m.pol2) INTO cursor1
13 дек 12, 20:16    [13628542]     Ответить | Цитировать Сообщить модератору
 Re: Использование в SELECT ... WHERE вычисляемых полей  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Еще можно сравнить поле самим собой.

SELECT fio,pol,data FROM table1 WHERE pol = IIF(m.polMW='все', pol, m.polMW) INTO cursor1
13 дек 12, 20:26    [13628568]     Ответить | Цитировать Сообщить модератору
 Re: Использование в SELECT ... WHERE вычисляемых полей  [new]
mosalova
Member

Откуда: Украина, Харьков
Сообщений: 29
ВладимирМ
Возможны, еще варианты

3. Если в таблице не может быть других значений кроме "М" и "Ж", то можно указать два условия, объединенных по OR или функцию Inlist() или директиву IN.

Local pol1, pol2
if m.polMW='все'
    pol1 = 'м' 
    pol2 = 'ж'
else
    store m.polMW to pol1, pol2
endif

SELECT fio,pol,data FROM table1 WHERE pol IN (m.pol1, m.pol2) INTO cursor1


Заработало! Огромное спасибо! у меня подобного рода выборок много будет и такой вариант позволит уйти от кучи IF ELSE
13 дек 12, 20:48    [13628644]     Ответить | Цитировать Сообщить модератору
 Re: Использование в SELECT ... WHERE вычисляемых полей  [new]
glamis
Member

Откуда:
Сообщений: 603
mosalova,

SELECT fio,pol,data FROM table1 WHERE polMW = 'все or pol=polMW INTO cursor1
16 дек 12, 20:40    [13639668]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить