Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выражение CASE в операторе SELECT


Егоров А.Н. ©   (2007-01-22 11:23:00) 

Помогите, пожалуйста. Не получается выполнить запрос (Delphi 7, ADO, провайдер VFPOLEDB v.8, базы FoxPro 3.x):

select
mA.dataoper,
mA.nndoc,
case
 when (mA.kt_schet like '62%') then '    ХХ'
 else '    YY'
end as numdoc,
mA.summa as otgr
from main mA
where mA.dt_schet like '62%'

При активации ADOQuery выдает ошибку “Command contains unrecognized phrase/keyword”. Все дело в выражении “case when then”, т.к. запрос:

select
mA.dataoper,
mA.nndoc,
mA.summa as otgr
from main mA
where mA.dt_schet like '62%'

срабатывает без ошибок. В чем здесь дело: в VFPOLEDB v.8 или у меня ошибка в выражении “case when then”?


sniknik   (2007-01-25 11:53:00) [1]

> а substring какой-нибудь есть?
есть наверняка, надо доку смотреть... не уверен, но по старым, смутным "тайным" знаниям, еще с досовского фокса, может подойти функция AT(). (поиск подстроки в строке. типа аналог Pos дельфей)


Егоров А.Н.   (2007-01-25 11:44:00) [2]

Все несколько сложнее. С полем <kt_schet> я смогу разобраться, а вот с другим полем <nndoc>, где должно быть <nndoc like "%S%">, а позиция <S> может быть любой, я уже не смогу воспользоваться <substring>.
Поэтому я на <case when ... then ...> плюнул и уже разбил запрос на несколько.


ЮЮ   (2007-01-25 10:57:00) [3]


> В iif не проходит like '62%',


а substring какой-нибудь есть?
iif(substring(mA.kt_schet, 1, 2) = '62','    ХХ','    YY')


Егоров А.Н.   (2007-01-25 10:39:00) [4]

В iif не проходит like '62%', проходит только iif(mA.kt_schet='62','    ХХ','    YY') as numdoc. А это не удовлетворяет.


sniknik   (2007-01-22 13:52:00) [5]

в VFP есть iif, можно им попробовать
т.е. аналогичное
case
when (mA.kt_schet like '62%') then '    ХХ'
else '    YY'
end as numdoc

будет
iif(mA.kt_schet like '62%','    ХХ','    YY') as numdoc

незнаю только возьмет like условие или нет, не делал так никогда.


Johnmen   (2007-01-22 12:36:00) [6]

Да, не поддерживается.
Возможно, имеет смысл делать эти условия на уровне приложения.


Егоров А.Н.   (2007-01-22 11:55:00) [7]

Оператором UNION можно конечно попробывать, но это почти тоже самое, что разбить этот запрос на несколько, а потом их объединить. Дело в том, что на самом деле приведенный в вопросе запрос упрощен, а в действительности мой запрос содержит пять WHEN THEN в выражении CASE да уще с последующей сортировкой ORDER BY. Поэтому хотелось бы использовать всеже выражение CASE.


Егоров А.Н.   (2007-01-22 11:44:00) [8]

Что значит: Дело в “Command contains unrecognized phrase/keyword”.
Это значит. что VFPOLEDB v.8 не поддерживает выражения “case when then” или что-то еще?


Johnmen   (2007-01-22 11:34:00) [9]


> В чем здесь дело:


Дело в “Command contains unrecognized phrase/keyword”.


Desdechado   (2007-01-22 11:28:00) [10]

попробуй через UNION ALL разложить


Наверх

Титульная страница Поиск, карта сайта Написать письмо