Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 12:28   #1
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
Вопрос iif в запросе SQL

Добрый день!
Есть у меня прога для работы с БД на Sybase. Подключаюсь к Бд через компоненты DBExpress, а именно SQLConnection.Далее связываю между собой SQLConnectoin и SQLQuery. В SQLQuery пишу запрос со следующей строчкой.
Код:
SELECT dbo.Market.Short AS [АЗС], dbo.GAS.Name AS [Товар], SUM(IIF(dbo.LOpers.Type=1,dbo.LOpers.Summ,-dbo.LOpers.Summ))AS [Сумма]
При попытки выполнить запрос выскакивает ошибка

Методом тыка выяснил что всё дело в
Код:
IIF(dbo.LOpers.Type=1,dbo.LOpers.Summ,-dbo.LOpers.Summ)
Если этот IIF убрать, то всё работает замечательно, запрос выполняется.
Прошу подсказать знающих людей, как правильно использовать оператор IIF в SQL запросе, чтобы он выполнялся?

Пробовал тот же запрос через ACCESS - запрос выполняется без ошибок.
Изображения
Тип файла: jpg скрин.JPG (7.7 Кб, 64 просмотров)

Последний раз редактировалось VHomer; 29.05.2012 в 12:30. Причина: Уточнение
VHomer вне форума Ответить с цитированием
Старый 29.05.2012, 12:41   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Перевод: "Некоректный синтаксис возле dbo" ... т.е. скорее всего у тебя ошибка в "минусе" перед dbo
Цитата:
Код:
-dbo.LOpers.Summ
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 29.05.2012, 12:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Yur@, ему ОТНИМАТЬ надо, если тип не равен 1!

VHomer, а с чего Вы вообще решили, что в MS Access и в Sybase одинаковый синтаксис SQL ?! IIF - это как раз таки не стандарт!

пробуйте через CASE - если не пойдёт - смотрите как в вашем Sybase задаются условия. Но не стоит SQL от одной СУБД проверять в другой - каждая субд поддерживает свой диалект, имеет свои особенности и т.д.

вариант с case
Код:
SELECT dbo.Market.Short AS [АЗС], dbo.GAS.Name AS [Товар], 
SUM( case when dbo.LOpers.Type=1 then dbo.LOpers.Summ, else -dbo.LOpers.Summ end) AS [Сумма]
ну или так:
Код:
SELECT dbo.Market.Short AS [АЗС], dbo.GAS.Name AS [Товар], 
SUM( case dbo.LOpers.Type when 1 then dbo.LOpers.Summ else -1*dbo.LOpers.Summ end) AS [Сумма]
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2012, 13:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А полностью запрос не судьба привести? Где FROM, WHERE и GROUP BY? И SYBASE IIF вроде не поддерживает (точно не знаю)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.05.2012, 14:56   #5
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
Перевод: "Некоректный синтаксис возле dbo" ... т.е. скорее всего у тебя ошибка в "минусе" перед dbo
Минус тут не причём. Я перед тем как писать и этот вариант ответил.
С английским у меня всё хорошо)
VHomer вне форума Ответить с цитированием
Старый 29.05.2012, 14:59   #6
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

вариант с case
Код:
SELECT dbo.Market.Short AS [АЗС], dbo.GAS.Name AS [Товар], 
SUM( case when dbo.LOpers.Type=1 then dbo.LOpers.Summ, else -dbo.LOpers.Summ end) AS [Сумма]
Та же ошибка

Цитата:
ну или так:
Код:
SELECT dbo.Market.Short AS [АЗС], dbo.GAS.Name AS [Товар], 
SUM( case dbo.LOpers.Type when 1 then dbo.LOpers.Summ else -1*dbo.LOpers.Summ end) AS [Сумма]
А вот так запрос выполнился. Спасибо большое. На будущее буду знать.
VHomer вне форума Ответить с цитированием
Старый 29.05.2012, 15:01   #7
VHomer
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А полностью запрос не судьба привести? Где FROM, WHERE и GROUP BY? И SYBASE IIF вроде не поддерживает (точно не знаю)
Начиная с FROM идёт несколько таблиц и связи по ним, потом ещё группировка. Я точно был уверен что там всё правильно, поэтому и не стал тот кусок выкладывать, чтобы при просмотре ничего лишнего в глаза не лезло.
VHomer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DateTimePicker в SQL запросе doldb БД в Delphi 12 05.01.2011 10:25
if в запросе sql serres PHP 2 28.05.2010 12:32
Группировка в SQL запросе wm_leviathan SQL, базы данных 8 09.03.2010 13:36
group by в sql-запросе AntonStal БД в Delphi 3 04.09.2009 08:21
Ошибка в SQL запросе...!? KeyDok БД в Delphi 5 21.06.2007 09:19