powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Использование в SELECT ... WHERE вычисляемых полей
6 сообщений из 6, страница 1 из 1
Использование в SELECT ... WHERE вычисляемых полей
    #38078387
mosalova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет!

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

Сейчас выборка по полу выполняется так:
Код: sql
1.
2.
3.
4.
5.
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= указать, что нужно выбирать все записи, если пользователь выберет 'все', типа
Код: sql
1.
SELECT fio,pol,data FROM table1  WHERE pol=* INTO cursor1
...
Рейтинг: 0 / 0
Использование в SELECT ... WHERE вычисляемых полей
    #38078434
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
lcSex=IIF(polMW='м' OR polMW='ж',polMW,'мж')
SELECT fio,pol,data FROM table1 WHERE pol $ lcSex INTO cursor1
* бесполых, к сожалению, не отберёт...
...
Рейтинг: 0 / 0
Использование в SELECT ... WHERE вычисляемых полей
    #38078466
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможны, еще варианты

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

Код: sql
1.
SELECT fio,pol,data FROM table1 WHERE IIF(m.polMW='все', .T., pol=m.polMW) INTO cursor1



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

Код: sql
1.
SELECT fio,pol,data FROM table1 WHERE pol = IIF(m.polMW='все', "", m.polMW) INTO cursor1



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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
...
Рейтинг: 0 / 0
Использование в SELECT ... WHERE вычисляемых полей
    #38078474
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно сравнить поле самим собой.

Код: sql
1.
SELECT fio,pol,data FROM table1 WHERE pol = IIF(m.polMW='все', pol, m.polMW) INTO cursor1
...
Рейтинг: 0 / 0
Использование в SELECT ... WHERE вычисляемых полей
    #38078498
mosalova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВозможны, еще варианты

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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
...
Рейтинг: 0 / 0
Использование в SELECT ... WHERE вычисляемых полей
    #38081173
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mosalova,

SELECT fio,pol,data FROM table1 WHERE polMW = 'все or pol=polMW INTO cursor1
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Использование в SELECT ... WHERE вычисляемых полей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]