Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Внизiif в Запросе Найти похожие ветки
← →
Vopros (2007-01-04 07:09) [0]Доброго времени суток, уважаемые Мастера!
Использую таблицы fox pro, ADOQuery.
1. В таблице есть поле цены (price) за упаковку и поле количества штук в упаковке (kol) (причем если в упаковке 1 штука, то в поле количества указан 0), через запрос пытаюсь рассчитать стоимость одной штуки:select iif(kol==0,price,price/kol) from table
При этом выходит ошибка "Invalid floating point operation". Если же price поделить на 1 (соответственно результат будет целое число), ошибок не выходит. Как можно с помощью iif получить вещественные числа?
2. Также с помощью iif не могу получить текстовый результат для поля размером большим 7 символов. (Например iif (pole==1,"Хорошо","Великолепно") , результат false будет урезанным типа "Великол" и если использовать группировку, то возникает ошибка что-то типа "error building sort key", если же вместо "Великолепно" написать "Отлично", то все проходит нормально)
Подскажите, как можно корректно работать с iif, или может ей есть какая-либо замена. Спасибо.
← →
ЮЮ © (2007-01-04 08:11) [1]
> Подскажите, как можно корректно работать с iif, или может
> ей есть какая-либо замена
Использовать UNION, например
select price from table where (kol = 0) or (kol IS NULL)
union
select price/kol from table where (kol > 0)
P.S. может быть есть записи, где kol IS NULL? И тогда заменить условие
iif(kol > 0, price/kol, price)
← →
VOPROS (2007-01-04 08:52) [2]
>
>
> Использовать UNION, например
>
> select price from table where (kol = 0) or (kol IS NULL)
> union
> select price/kol from table
У меня на самом деле будет очень длинный запрос с кучами полей,кучей связей с таблицами и условиями. Мне тогда необходимо дважды написать запрос? Типа:SELECT <куча полей>,price from table JOIN... GROUP BY... HAVING... kol = 0
UNION
SELECT <куча полей>,price/kol from table INNER JOIN... GROUP BY... HAVING... kol > 0
← →
ЮЮ © (2007-01-04 09:10) [3]А как насчет
P.S. может быть есть записи, где kol IS NULL? И тогда заменить условие
iif(kol > 0, price/kol, price)
← →
ЮЮ © (2007-01-04 09:12) [4]GROUP BY... HAVING... kol = 0SELECT <куча полей>,price from table JOIN... GROUP BY... HAVING... kol = 0
Что-то не нравится мне твой "агрегирующий" за прос :)
← →
VOPROS (2007-01-04 10:26) [5]
> А как насчет
> P.S. может быть есть записи, где kol IS NULL? И тогда
> заменить условие
> iif(kol > 0, price/kol, price)
нет, так ему не нравится тоже, кстати значения NULL нет
> Что-то не нравится мне твой "агрегирующий" за прос :)
вообще-то да, агрегатные я, наверное, функции использовать не буду, HAVING или WHERE там видно будет, вопрос не в предикате, а вSELECT <куча полей>,price from table JOIN... GROUP BY.. . <прочие условия> AND kol = 0
UNION
SELECT <куча полей>,price/kol from table JOIN... GROUP BY... <прочие условия> AND kol > 0
так и использовать? а не будет ли запрос слишком тяжелым? и неужели с iif ничего нельзя сделать ни по 1, ни по 2 пункту?
← →
sniknik © (2007-01-04 11:07) [6]> и неужели с iif ничего нельзя сделать ни по 1, ни по 2 пункту?
нельзя, т.к. он тут не причем (болит голова а уколы назначили знаете куда? она то тут при чем... :). проблема в чемто другом (чтото у тебя неладно в работе с числами/данными)
возможный вариант по 1
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217
по 2, не нашел в инете, с локального хелпа
Error building sort key (Error 2186)
This error is generated when sort key truncation is about to occur, typically during GROUP BY, ORDER BY or other sorting operations. This can happen with use of a sort key that contains an expression, such as a Memo field, whose length is not fixed.
← →
sniknik © (2007-01-04 11:15) [7]вообще, первым делом, прежде чем разбираться, обновил бы драйвер фокса... (как знать, может у тебя настолько древний, что еще не поддерживает varchar... а соответственно не видит разницы между ним и мемо)
← →
VOPROS (2007-01-05 06:24) [8]
> нельзя, т.к. он тут не причем
ни при чем, т.к. просто price/kol сделать тоже нельзя :(, статью почитаю - спасибо
> occur, typically during GROUP BY
действительно ошибка выходит, когда пытаюсь использовать GROUP BY, но как же тогда заfixed эту самую length, чтоб она была более 7 симоволов
> sniknik
стоит Microsoft OLE DB Provider for Visual FoxPro 9.0
← →
Desdechado © (2007-01-05 11:20) [9]> как же тогда заfixed эту самую length, чтоб она была более 7 симоволов
CAST
?
← →
Anatoly Podgoretsky © (2007-01-05 12:55) [10]> Desdechado (05.01.2007 11:20:09) [9]
А провайдер поддерживает?
Тогда да.
← →
sniknik © (2007-01-05 13:17) [11]> стоит Microsoft OLE DB Provider for Visual FoxPro 9.0
аналогично и проблем подобно описанным нет.
> но как же тогда заfixed эту самую length
легко, но не могу проверить... (не могу глюк сэмулировать)
попробуй вместо этого iif(pole==1,"Хорошо","Великолепно") это iif(pole=1,"Хорошо ","Великолепно")
← →
sniknik © (2007-01-05 13:37) [12]> когда пытаюсь использовать GROUP BY
блин не обратил сразу внимания...
ты чего же сначала из интежера делаешь строку а после групируешь по строке? солидности программе(/тормозов) пытаешся добиться?
не лучше ли группировать по оригинальному числу, а уже в результирующем делать замену? по числу будет гораздо быстрей.
← →
VOPROS (2007-01-05 15:10) [13]
> попробуй вместо этого iif(pole==1,"Хорошо","Великолепно")
> это iif(pole=1,"Хорошо ","Великолепно")
хм, а ларчик просто открывался :)
> не лучше ли группировать по оригинальному числу, а уже в
> результирующем делать замену? по числу будет гораздо быстрей.
спасибо за совет
← →
try (2007-01-05 15:14) [14]
> попробуй вместо этого iif(pole==1,"Хорошо","Великолепно")
> это iif(pole=1,"Хорошо ","Великолепно")
попробуй вместо этого iif(pole==1,"Хорошо","Великолепно") это iif(pole<>1,"Великолепно","Хорошо")
← →
VOPROS (2007-01-11 13:42) [15]
> CAST
сselect cast(iif(kol==0,price,price/kol) as numeric (5,2)) as price_one from table
мне помог - спасибо
← →
VOPROS (2007-01-12 06:59) [16]
> с select cast(iif(kol==0,price,price/kol) as numeric (5,
> 2)) as price_one from table мне помог - спасибо
ничего не понимаю - с одной таблицей проходит, с большинством нет, ругается типа "деление на ноль", непосредственно в Foxpro запрос выполняется нормально со всеми таблицами, а вот в делфи никак - или сам делфи, или провайдер кривой какой (хотя брался с сайта мелкософта) ???
← →
ЮЮ © (2007-01-12 07:51) [17]а более безопасное iif(kol > 0, price/kol, price) ну никак не желаешь попробовать?
← →
VOPROS (2007-01-12 08:27) [18]
> а более безопасное iif(kol > 0, price/kol, price) ну никак
> не желаешь попробовать?
ну конечно, уже испробовано :) - результат тот же :(
← →
ЮЮ © (2007-01-12 09:03) [19]
> ничего не понимаю - с одной таблицей проходит, с большинством
> нет, ругается типа "деление на ноль", непосредственно в
> Foxpro запрос выполняется нормально со всеми таблицами,
> а вот в делфи никак - или сам делфи, или провайдер кривой
> какой (хотя брался с сайта мелкософта) ???
Или на клиенте (в обработчике) пытаешься манипулировать данными.
ругается типа "деление на ноль" - из этого ыфыода не сделаешь.
даже "Invalid floating point operation" больше смахивает на дельфийскую ошибку, чем на ADO-шную.
Пора, наверное, отладчик использовать :)
← →
Anatoly Podgoretsky © (2007-01-12 13:22) [20]> ЮЮ (12.01.2007 07:51:17) [17]
kol может быть меньше нуля
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c