Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Вниз

Еще вопросик по SQL.   Найти похожие ветки 

 
mik   (2002-03-27 12:44) [0]

Может подскажите, как в одном запросе реализовать след.
Выбери поле 1 если поле2 > 0 иначе выбери поле3.
Короче говоря, как реализовать конструкцию if else


 
Reindeer Moss Eater   (2002-03-27 12:51) [1]

Таких заморочек не возникает если соблюдать хотя бы первые три нормальные формы при проектировании таблиц.


 
mik   (2002-03-27 13:09) [2]

А может как-нибудь можно реализовать все-таки?


 
SEM   (2002-03-27 13:15) [3]

Для FoxPro вроде можно использовать IIF в SQL запросе.
Для MSSQL соответственно CASE
Для DBASE вроде нет подобного, хотя могу ошибаться.
Проще, создать вычисляемое поле для TQuery и там написать всю логику.


 
MAxiMum   (2002-03-27 13:16) [4]

В одном запросе, IMHO, не получится.
Сделай хранимую процедуру или напиши прогрумму в родной СУБД (dBase или FoxPro).


 
mik   (2002-03-27 14:10) [5]

Мда...жалко однако


 
Lusha   (2002-03-27 14:24) [6]

SELECT FIELD1
FROM TABLE1
WHERE FIELD2 > 0
UNION
SELECT FIELD3
FROM TABLE1
WHERE FIELD2 <= 0


 
Внук   (2002-03-27 15:26) [7]

Реализовать условный оператор в общем виде IMHO невозможно стандартом SQL, но конкретно Ваш случай описывается таким запросом:
SELECT DECODE(GREATEST(Поле2,0),0,Поле3,Поле1) as Имя_Поля
FROM ...

GREATEST(Поле2,0) дает, очевидно, 0 если Поле2<=0, тогда выбиратся Поле3, иначе выбирается Поле1. Эта конструкция работает в ORACLE. Не знаю, насколько она стандартна, но вдруг будет работать и у Вас, в противном случае, наверное, можно подобрать ее аналог. Выбираемые поля, конечно, должны быть в этом случае совместимы.


 
Shaman_Naydak   (2002-03-27 22:36) [8]

>> Внук
Как это - CASE - это как раз таки очень даже по стандарту,
да и решение через UNION пройдет абсолютно везде.


 
Внук   (2002-03-28 10:06) [9]

>>Shaman_Naydak ©
Наверное, это уже какой-то продвинутый стандарт, я ориентируюсь на более ранние.
Вариант с UNION, конечно, самый простой и разумный, нет вопросов. Свой вариант я привел, потому что захотелось суметь сделать выборку действительно ОДНИМ запросом, как требуется по условию, то есть просто размять мозги. UNION в этом смысле все-таки упрощение, хоть и выполняется одним пакетом.



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

Форум: "Базы";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
4-57913
skywalker
2002-02-15 13:20
2002.04.18
Получение информации о процессах под NT!!!!!!!!


1-57798
Yuriy
2002-04-06 18:24
2002.04.18
как определить имя компонента вызвавшего событие


1-57675
Gamar
2002-04-07 14:34
2002.04.18
Шрифты!!!


3-57629
Yuri Btr
2002-03-28 12:18
2002.04.18
Изменение формата базы данных!


1-57818
Demon Ltd
2002-04-07 01:27
2002.04.18
Повторное обращение с помощью с Меню





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский