Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Выражение CASE в операторе SELECT   Найти похожие ветки 

 
Егоров А.Н.   (2007-01-22 11:23) [0]

Помогите, пожалуйста. Не получается выполнить запрос (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”?


 
Desdechado ©   (2007-01-22 11:28) [1]

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


 
Johnmen ©   (2007-01-22 11:34) [2]


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


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


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

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


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

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


 
Johnmen ©   (2007-01-22 12:36) [5]

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


 
sniknik ©   (2007-01-22 13:52) [6]

в 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 условие или нет, не делал так никогда.


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

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


 
ЮЮ ©   (2007-01-25 10:57) [8]


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


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


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

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


 
sniknik ©   (2007-01-25 11:53) [10]

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
2-1175013602
Comp
2007-03-27 20:40
2007.04.15
Как обработать сообщение WM_PAINT для Edit-а?


1-1171881177
Руссо Партизано
2007-02-19 13:32
2007.04.15
Импорт из Wordа


5-1151065835
Артёмич
2006-06-23 16:30
2007.04.15
TreeView передвежение главных item ов вверх, вниз


1-1172004366
timself
2007-02-20 23:46
2007.04.15
Как перехватить начало перезагрузки?


15-1174515623
Галинка
2007-03-22 01:20
2007.04.15
Google подаст