![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выражение 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 разложить