Форум: "Базы";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизВыражение 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 1.422 c