Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select CEILING FLOOR TRUNC / 4 сообщений из 4, страница 1 из 1
03.08.2018, 19:08
    #39683223
Sashaua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select CEILING FLOOR TRUNC
Ранее спрашивал относительно округления в запросе, возник еще один вопрос.
Есть таблицы которые отвечают за цены.

IDNAMEID_STATUSID_ROUNDING

и
ID_PRICEID_MODELPRICEDATE_ID_USERID_STATUS

Бизнес захотел чтобы одни цены округляль, другие неокруглялись, для этого я добавил ID_ROUNDING поле которое определяет как цена округляеться
1-до ближайшего большего целого
2-до ближайшего меньшего целого
3-Без округления
Есть процедура формирования прайса, кусок SQL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select A.ID_MODEL, B.NAME_MODEL,
       case(:ID_ROUNDING)

         when 1 then ceiling(P.CENA)
         when 3 then trunc(P.CENA, 2)
         when 2 then floor(P.CENA)

       end PRICE_

from STOREHOUSE A
join ID_MODEL B on A.ID_MODEL = B.ID

join PRICE P on P.ID_MODEL = A.ID_MODEL and
      P.STATUS = 1 and
      P.ID_PRICE = :ID_PRICE       


Вопрос, ID_ROUNDING передавать в процедуру с клиента, или можно так?
Код: sql
1.
 case (select ID_ROUNDING from cena where id=:ID_PRICE)


Прайс смотриться по одной конкретной цене ( ID_PRICE ).
Возможно есть по вашему мнению другой вариант решения?
Заранее спасибо.
...
Рейтинг: 0 / 0
03.08.2018, 21:45
    #39683249
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select CEILING FLOOR TRUNC
Sashauaкоторое определяет как цена округляеться
тся. произноси вслух для проверки.
"как цена округляется"
"как цена должна округлиться"

Насчет самого округления, вниз или вверх. На мой взгляд, это внутреннее дело конторы. Хочет так, или хочет сяк. Выдавать в процедурах или коде варианты - это развлекуха разработчиков. К примеру, я так развлекался в 1991 году, когда выдавал варианты подсчета зарплаты по КТУ, куда разбрасывать копейки - всем поровну, тому кто меньше заработал, тому кто больше заработал, и т.д.
Так что, в общем случае пофиг - брать из таблицы на клиента, а потом втыкать в запрос, или прямо в запросе из таблицы...
Вот только
case (select ID_ROUNDING from cena where id=:ID_PRICE)
является бредом, лучше воткнуть таблицу CENA в джойн с PRICE. Или это должно быть в PRICE. Или еще где.
...
Рейтинг: 0 / 0
03.08.2018, 22:37
    #39683256
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select CEILING FLOOR TRUNC
Как-то пресно все, а как же любимые маркетологами ХХХХ99.95 ? А как же кратно 5 рублям?
А как насчет посмотреть "почем мы там эту хрень в прошлом месяце собирались отгружать?"

Предпочитаю все, что округлил, тут же рядышком и сохранить, иначе нетрадиционные утехи плоти гарантированы. После округления брать для дальнейших расчетов только сохраненные явно данные.
...
Рейтинг: 0 / 0
04.08.2018, 10:50
    #39683282
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select CEILING FLOOR TRUNC
kdvSashauaкоторое определяет как цена округляетьсятся. произноси вслух для проверки.Лучше задавать вопрос на соответствие: "что делает" или "что делат ь "
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select CEILING FLOOR TRUNC / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]