powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select case
39 сообщений из 39, показаны все 2 страниц
select case
    #39674717
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, существует право на жизнь следующий вариант
Код: sql
1.
2.
3.
4.
select .......,
case (:id_price)
 when 1 then CEILING(a.price*b.exchangerate_max)
 when 2 then (a.price*b.exchangerate_max)


Суть следующая есть несколько цен, в зависимости от выбранной цены в одном случае выбрать цену умноженную на курс с округлением в большую сторону, в другом без округления.
Заранее спасибо
...
Рейтинг: 0 / 0
select case
    #39674718
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не имеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674719
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
а как лучше сделать в данном случае?
...
Рейтинг: 0 / 0
select case
    #39674746
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе имеет.


А почему не имеет?

Сам case работает:

Код: plsql
1.
2.
3.
4.
5.
6.
select
  case (:param)
    when 1 then '1-1'
    when 2 then '2-2'
  end
from rdb$database
...
Рейтинг: 0 / 0
select case
    #39674747
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua> Подскажите, существует право на жизнь следующий вариант

Право на жизнь имеют все варианты.
Какой из них лучше - зависит от.

> есть несколько цен, в зависимости от выбранной цены

Несколько цен где? Т.е. эту операцию нужно делать для
каждой цены отдельно или один и тот же вариант для всех?
Грубо говоря, результирующая запись одна или их много?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674894
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

Полный запрос нужен. Я, например, вижу, что запрос по неким таблицам, а кейс по локальной переменной. Странновато.
...
Рейтинг: 0 / 0
select case
    #39674924
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как раз не имеет значения.
Имеет значение кейс меняется
или неизменен для резалтсета.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674926
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXISashaua,

Полный запрос нужен. Я, например, вижу, что запрос по неким таблицам, а кейс по локальной переменной. Странновато.

Много где применяется подход "цена по первой колонке, по второй колонке" и т.п.
В прайсе предварительно заданы допустим 3-5 колонок с различными ценами,
у клиента имеется право использовать цены из конкретной колонки.
Вот в параметре номер колонки и задается.
...
Рейтинг: 0 / 0
select case
    #39674935
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе имеет.Почему? А то у меня немного другое мнение.

Да, если оно не внутри процедуры, то может потребоваться явно указать cast-ом тип параметра

Код: sql
1.
2.
3.
4.
5.
6.
select
  case (cast (:param as integer))
    when 1000000 then '1-1'
    when 2000000 then '2-2'
  end
from rdb$database
...
Рейтинг: 0 / 0
select case
    #39674945
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Много где применяется подход
fraks> Вот в параметре номер колонки и задается.

Василий, ви таки правы, но чтобы так задавался способ
округления, думаю, не слышали даже ашкенази Майами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674960
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyПочему?

Потому что оптимизатор Firebird недостаточно умён чтобы предвычислять инварианты и
отсекать мёртвые ветви дерева. А в данном случае аффтар с клиента гонит константу, которая
заставляет отсыхать кусок запроса. По-моему, это неправильный способ разделения работы с
точки зрения идеологии клиент-сервер.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674971
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в данном простейшем случае это не так важно.
Вот если бы там были поля из разных таблицы,
подзапросы и пр. извращения - да, моветон.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674987
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovв данном случае аффтар с клиента гонит константу, которая
заставляет отсыхать кусок запроса.Клеить куски запроса каждый раз заново, каждый раз препарировать и при этом не напортачить... или же оттестировать один раз запрос на пяток параметров и кормить потом только параметры без склеек-переклеек. Я не берусь судить заранее, что выгодней.
...
Рейтинг: 0 / 0
select case
    #39674993
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyКлеить куски запроса каждый раз заново, каждый раз препарировать и при этом не
напортачить... или же оттестировать один раз запрос на пяток параметров и кормить потом
только параметры без склеек-переклеек.

Только чайники клеят. Ну а "протестировать пяток запросов" против "протестировать один
запрос с пятью значениями параметра" всё же попроще будет.

В данном же случае и вовсе ничего не надо клеить: достаточно всегда получать с сервера
неокруглённое значение, а потом в зависимости от клиентской переменной округлять или не
округлять его. Арифметика на сервере - скользкая штука.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39674997
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS> достаточно всегда получать с сервера неокруглённое значение

Не перевелись здравомыслящие люди... :)
Но есть нюанс (с) - обработанное значение
может понадобиться опять же на сервере.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675005
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамобработанное значение может понадобиться опять же на сервере.

Вот где оно понадобится - там и нужно принимать решение об его обработки или необработке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675030
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovАрифметика на сервере - скользкая штука.Арифметика она и в Африке арифметика. А вот округление многие тупо не понимают, и дело тут не в сервере. Ну не укладывается в головах, что действия над округленными операндами дадут отличающийся результат от округленного результата действий над исходными операндами.
...
Рейтинг: 0 / 0
select case
    #39675214
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksМного где применяется подход "цена по первой колонке, по второй колонке" и т.п.

Задача похожая, есть справочник товаров и есть несколько цен (Оптовая,Розничная,ЦенаА,ЦенаБ.....), бизнес захотел чтобы при выборке справочника оптовая,розничная цены неокруглялась, а все остальные округлялись. id_price ето и есть ID_цены при выборке выбираеться только одна ID_цена. id_price передаеться с клиента и в рамках одной выборки неизменно, хочу елегантным способом сделать.
...
Рейтинг: 0 / 0
select case
    #39675218
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashauaесть справочник товаров и есть несколько цен
(Оптовая,Розничная,ЦенаА,ЦенаБ.....)
Ты ещё скажи, что под эти цены выделены отдельные поля в справочнике товаров...

Sashauaхочу елегантным способом сделать

И почему большинство ТСов для этого разводят проктостоматологию?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675220
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы ещё скажи, что под эти цены выделены отдельные поля в справочнике товаров...
Нет, есть отдельная таблица цен

ID_PRICEID_MODELPRICEDATE_ID_USERID_STATUS
При желании можно наплодить сколько угодно цен в справочнике. Когда изменяют цену текущая активная цена ID_STATUS становиться неактивной и добавляеться новая запись с активной ценой, таким образом можно посмотреть кто и когда поменял цену.
...
Рейтинг: 0 / 0
select case
    #39675222
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashauaесть отдельная таблица цен

Но при этом признак необходимости округления ты задаёшь в CASE. Ух ты...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675231
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov Но при этом признак необходимости округления ты задаёшь в CASE. Ух ты...
Понимаю Вашу иронию.
Да можно на клиенте округлить все цены так как мне необходимо, так и делаю. Но вылазят хвосты когда цену необходимо пересчитать с одной валюты в другую например PRICE =15 текущий курс = 26.31 = 394.65 продажники хотять чтобы это было 395. Для некоторых цен.
...
Рейтинг: 0 / 0
select case
    #39675242
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Много где применяется подход
fraks> Вот в параметре номер колонки и задается.

Василий, ви таки правы, но чтобы так задавался способ
округления, думаю, не слышали даже ашкенази Майами.


Я таки не Василий :)

С округлениями еще больше заморочек.
Возможно человек делает несколько вариантов под хотелки разных контрагентов :)
...
Рейтинг: 0 / 0
select case
    #39675244
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovГаджимурадов Рустамобработанное значение может понадобиться опять же на сервере.

Вот где оно понадобится - там и нужно принимать решение об его обработки или необработке.


Лучше что бы выравнивание значений выполнялось в единственном месте - тогда, в случае чего и искать и править придется в нем же, а не в куче запросов и в куче клиентов в разных запросах.
...
Рейтинг: 0 / 0
select case
    #39675245
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksВозможно человек делает несколько вариантов под хотелки разных контрагентов :)

Так и есть
...
Рейтинг: 0 / 0
select case
    #39675306
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua> Но вылазят хвосты когда цену необходимо пересчитать
Sashaua> с одной валюты в другую например PRICE =15 текущий
Sashaua> курс = 26.31 = 394.65 продажники хотять чтобы это было 395.

Продажники люди неглупые. Пару десятков таких преобразований из
одной валюты в другую (и даже между 2 валютами) - и глядишь цена
вырастет заметно. Округлять "вниз" они не предлагают, есессно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675308
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Я таки не Василий :)

Ой, Владимир, извини, на автомате спутал с коллегой из соседней темы. :)

> Возможно человек делает несколько вариантов под хотелки разных контрагентов :)

Ну, закладывать каждую хотелку каждого контрагента
в CASE на сервере - граблепроктостоматология, ИМХО.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39675330
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Я таки не Василий :)

Ой, Владимир, извини, на автомате спутал с коллегой из соседней темы. :)

> Возможно человек делает несколько вариантов под хотелки разных контрагентов :)

Ну, закладывать каждую хотелку каждого контрагента
в CASE на сервере - граблепроктостоматология, ИМХО.


Закапывать это в код на клиенте - ничем не лучше.
Такова селяви.
Бизнес озвучит хотелки и настоит на их выполнении.
И хорошо если бизнес эти хотелки в состоянии нормально озвучить :)
...
Рейтинг: 0 / 0
select case
    #39675332
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамSashaua> Но вылазят хвосты когда цену необходимо пересчитать
Sashaua> с одной валюты в другую например PRICE =15 текущий
Sashaua> курс = 26.31 = 394.65 продажники хотять чтобы это было 395.

Продажники люди неглупые. Пару десятков таких преобразований из
одной валюты в другую (и даже между 2 валютами) - и глядишь цена
вырастет заметно. Округлять "вниз" они не предлагают, есессно.


А откуда возьмутся эти десятки преобразований??
Входная цена.
От нее наценка до уровня соответствующей колонки прайса.
Округление на эту цену.
Всё.

Округлять вниз смысла никакого нет.
...
Рейтинг: 0 / 0
select case
    #39675418
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому это не в код (на сервере, на клиенте) закладывают, а в реквизит цены "настройки округления", например.
...
Рейтинг: 0 / 0
select case
    #39675529
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryПоэтому это не в код (на сервере, на клиенте) закладывают, а в реквизит цены "настройки округления", например.

А что, реквизиты как-то сами, без какого-либо кода к цене научились применяться?
...
Рейтинг: 0 / 0
select case
    #39675604
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksА откуда возьмутся эти десятки преобразований??
Входная цена.
От нее наценка до уровня соответствующей колонки прайса.
Округление на эту цену.
Всё.

Десятки берутся в момент когда цена модели в $, а справочник смотрят в другогй валюте, и здесь выполняеться операция конвертирования.
...
Рейтинг: 0 / 0
select case
    #39675631
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksА что, реквизиты как-то сами, без какого-либо кода к цене научились применяться?Освежу твою память, раз через один пост уже забыл, о чём говорил в предыдущем.
Речь шла о "закладывать каждую хотелку каждого контрагента ... плохо на сервере, и на клиенте тоже плохо".
...
Рейтинг: 0 / 0
select case
    #39675821
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryfraksА что, реквизиты как-то сами, без какого-либо кода к цене научились применяться?Освежу твою память, раз через один пост уже забыл, о чём говорил в предыдущем.
Речь шла о "закладывать каждую хотелку каждого контрагента ... плохо на сервере, и на клиенте тоже плохо".

Так и куда ее закладывать в итоге?
...
Рейтинг: 0 / 0
select case
    #39675955
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryfraksА что, реквизиты как-то сами, без какого-либо кода к цене научились применяться?Освежу твою память, раз через один пост уже забыл, о чём говорил в предыдущем.
Речь шла о "закладывать каждую хотелку каждого контрагента ... плохо на сервере, и на клиенте тоже плохо".

Очередной клиент из 10 тысяч захотел свою хотелку.
Добавляем ее в код под именем "хотелка №10".
У клиентов, хотелки которых совпадают, пишем что цена формируется как "хотелка №10".
В свойствах контрагента прописываем номер его хотелки.

Реализацию хотелок, по возможности, сводим в одно место.
Например в SP или общий запрос который тянет цены с сервера.

Что не так в этой системе?
...
Рейтинг: 0 / 0
select case
    #39676040
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks> Добавляем ее в код под именем "хотелка №10".
> У клиентов, хотелки которых совпадают, пишем что

А конкретнее (как реализовано) ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
select case
    #39676070
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

Не надо ничего никуда добавлять и смотреть совпадения.
Все возможные способы округления давно придуманы, и системы управления (клиентами, ценами, заказами) как правило, уже содержат те 2-3 параметра, по которым округление производится.

Применять же "правила", заданные значениями этих параметров, умеет как клиент, так и сервер, в зависимости от того, что за вычисления производятся.

Короче, я против хард-кода, но за функцию.
...
Рейтинг: 0 / 0
select case
    #39676107
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамfraks> Добавляем ее в код под именем "хотелка №10".
> У клиентов, хотелки которых совпадают, пишем что

А конкретнее (как реализовано) ?


А чего у меня спрашиваете? Это впросы к ТС.

Про вариативность хотелок.
Например, формат экспорта данных для некоего ЭДО.
Отправляем клиентам документы в электронном виде, печатная форма в виде PDF - клиент может у себя распечатать ровно то что получит с товаром, когда он придет.
Те из клиентов которые каким-то образом автоматизировали учет и загрузку данных о приходах - берут их в электронном виде.
Некоторые уникумы хотят секса и запрашивают бухгалтерские печатные формы в Excel что бы потом из них выковыривать данные, а те люди которые четко понимают чего им нужно - формулируют свои хотелки более конкретно, но их не так много.
В итоге, идя навстречу ВСЕМ клиентам, у меня в программе реализовано всего 4 варианта специализированного экспорта в DBF и один неспециализированный. И вот эти 4+1 варианта хотелок закрывают все пожелания тычяч клиентов.

У ТС масштаб хотелок и вариантов реализации мне представляется примерно таким же, поэтому не вижу больших проблем.
...
Рейтинг: 0 / 0
select case
    #39676312
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery Короче, я против хард-кода, но за функцию.

Идея сделать для каждой из цен настройку "Округление" и пусть себе выбирают варианты, мне очень понравилась, надо будет в беклог закинуть.
Спасибо за подсказку.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select case
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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