powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перечисления в CASE
13 сообщений из 13, страница 1 из 1
Перечисления в CASE
    #39615393
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делим выдаваемый список на подразделы
-до месяца
-от месяца до 3-х
-от 3-х до 5-ти
-от 6-ти до года
-свыше года

Подскажите как сделать "красивее"?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    case ((current_date - cbd.date_receipt) / 30)
      when 0 then 4

      when 1 then 3
      when 2 then 3

      when 3 then 2
      when 4 then 2
      when 5 then 2

      when 6 then 1
      when 7 then 1
      when 8 then 1
      when 9 then 1
      when 10 then 1
      when 11 then 1

      else 0
    end difference_date


можно конечно 4 раза перечислять диапазоны when ((current_date - cbd.date_receipt) / 30) , но это, как мне кажется, вариант похуже
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615399
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615404
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Код: sql
1.
    when 1 and 2 then 3



не работает)
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615407
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

IIF?
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615411
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr
Код: sql
1.
1 and 2

... всю жизнь было false.
Научитесь не только правильно составлять логические выражения, но и использовать SQL-специфичные операторы (in, between, is).
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615415
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

в IIF строго два значения

Код: sql
1.
IIF(SC, V1, V2)
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615419
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

в данном случае выражение должно интерпретироваться как
Код: sql
1.
when (((current_date - cbd.date_receipt) / 30) = 1)  and (((current_date - cbd.date_receipt) / 30) = 2) then 3
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615421
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkrможно конечно 4 раза перечислять диапазоны when ((current_date - cbd.date_receipt) / 30) , но это, как мне кажется, вариант похужеИменно так, перечислять.
Если нужна эстетика - select from select\CTE помогут
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615422
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkrПодскажите как сделать "красивее"?

Выкинуть case, завести табличку с диапазонами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615423
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

конечно заменим and на or ))
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615425
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда оставим так (более дробного деления не предполагается)
вариант, как мне кажется, более производительнее других вариантов
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39615776
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkrПодскажите как сделать "красивее"?Используй функцию Decode() .
...
Рейтинг: 0 / 0
Перечисления в CASE
    #39666107
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mkr,

понадобилось сделать что-то подобное. Жаль, что в простом случае многовариантность не работает, очень удобно было бы. Видимо, пока в стандарте не предусмотрено никто не будет дёргаться. Сделал через select from select. Получилось оригинально. Типа:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select case d
         when d=0 then 4
         when d between 1 and 2 then 3  
         when d between 3 and 5 then 2  
         when d between 6 and 11 then 1
         else 0  
         end
from ( select ((current_date - cbd.date_receipt) / 30) d
         from cbd
       )
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Перечисления в CASE
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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