powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос IIF
6 сообщений из 6, страница 1 из 1
Запрос IIF
    #37915942
mr.zlodey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Использую vfpoledb в программе на c#, есть запрос:
SELECT a.tn, sum(IIF(vid=99 OR vid=38, a.sum, 0)) as s1, sum(IIF(vid=1 OR vid=2, a.sum, 0)) as s2 FROM D:\zug.dbf a GROUP BY a.tn
В качестве условия удобнее было бы использовать формат "vid in (99,38)", но при использовании in внутри iif получаю ошибку.
Для выполнения подобного рода запроса единственный вариант использовать OR для перечисления условия или возможны варианты с in?
...
Рейтинг: 0 / 0
Запрос IIF
    #37915959
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
inlist()
Код: sql
1.
iif(inlist(vid, 99, 38), a.sum, 0))
...
Рейтинг: 0 / 0
Запрос IIF
    #37915993
mr.zlodey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Спасибо.
...
Рейтинг: 0 / 0
Запрос IIF
    #37916093
mr.zlodey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
inlist не поддерживает более 25 элементов в условии, получаю ошибку, а мне как минимум нужно 30.
...
Рейтинг: 0 / 0
Запрос IIF
    #37916235
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr.zlodeyinlist не поддерживает более 25 элементов в условии, получаю ошибку, а мне как минимум нужно 30.
Есть такое ограничение, тогда через курсор с индексом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
create cursor FilterVid (vid i)
insert into FilterVid values (99)
insert into FilterVid values (38)
...
index on vid tag vid

select  a.tn, sum(IIF(IndexSeek(a.vid, .F., 'FilterVid', 'vid'), a.sum, 0)) as s1, ...


или с джоинами тоже самое
Код: sql
1.
2.
3.
...
select  a.tn, sum(IIF(isnull(FilterVid.vid), 0, a.sum) as s1, ...
     from D:\zug.dbf a left join FilterVid on a.Vid = FilterVid.Vid ...


только во втором случае надо проверять чтоб задвоений не было в FilterVid, иначе неправильно посчитает.
...
Рейтинг: 0 / 0
Запрос IIF
    #37916535
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В приниципе, никто не мешает объединить несколько inlist() через OR

Код: sql
1.
iif(inlist(vid, 99, 38, ...) or inlist(vir,1,2,...), a.sum, 0))



В каждом отдельном inlist() не более 25 значений, но через OR можно объединить бОльшее количество. Хотя, это фактически тот же вариант записи через OR все 30 значений, но более сложный.

Если команда формируется во вне, то я бы не заморачивался и оставил 30 сравнений, объединенных через OR.

PS: В принципе, можно еще через массивы попробовать, но не знаю, пройдет ли это через OLEDB

Код: sql
1.
2.
3.
4.
5.
6.
7.
Dimension aS1[30]
aS1 = 0   && значение по умолчанию для всех элементов массива
aS1[1] = 99
aS1[2] = 38
...

iif(ascan(aS1,vid)>0, a.sum, 0)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос IIF
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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