Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / select case / 25 сообщений из 39, страница 1 из 2
16.07.2018, 23:59
    #39674717
Sashaua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
Подскажите, существует право на жизнь следующий вариант
Код: 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
17.07.2018, 00:19
    #39674718
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
Не имеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.07.2018, 00:22
    #39674719
Sashaua
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
Dimitry Sibiryakov,
а как лучше сделать в данном случае?
...
Рейтинг: 0 / 0
17.07.2018, 03:34
    #39674746
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
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
17.07.2018, 03:49
    #39674747
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
Sashaua> Подскажите, существует право на жизнь следующий вариант

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

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

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

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

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

Много где применяется подход "цена по первой колонке, по второй колонке" и т.п.
В прайсе предварительно заданы допустим 3-5 колонок с различными ценами,
у клиента имеется право использовать цены из конкретной колонки.
Вот в параметре номер колонки и задается.
...
Рейтинг: 0 / 0
17.07.2018, 12:00
    #39674935
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
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
17.07.2018, 12:17
    #39674945
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select case
fraks> Много где применяется подход
fraks> Вот в параметре номер колонки и задается.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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