Главная страница
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.044 c
15-1174469649
isasa
2007-03-21 12:34
2007.04.15
Пароль SYSDBA для Interbase?


2-1175091039
XIO
2007-03-28 18:10
2007.04.15
Криптование внешних файлов средствами Delphi или API из Delphi


15-1174602059
eXPell
2007-03-23 01:20
2007.04.15
Смысл какой?


3-1169551985
vl
2007-01-23 14:33
2007.04.15
Добавление данных в таблицу


1-1171985703
webpauk
2007-02-20 18:35
2007.04.15
Уничтожение компонента изнутри