Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
9-1146341758
Pa5ha
2006-04-30 00:15
2007.04.15
Солнце на OpenGL


2-1175086087
Kirill1987
2007-03-28 16:48
2007.04.15
SQL-запрос


15-1174328422
koha
2007-03-19 21:20
2007.04.15
Можно ли два "Диалапа" одновременно юзать?


15-1174490202
Vendict
2007-03-21 18:16
2007.04.15
MOPSLinux 5.1


1-1172088240
MNGLW
2007-02-21 23:04
2007.04.15
Использование библиотек WinZip





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский