Преобразовать значение на основе диапазона - PullRequest
0 голосов
/ 12 апреля 2010

Мне нужно преобразовать число в другое значение в зависимости от диапазона:

то есть:

7 = "A"
106 = "I"

У меня есть такой диапазон:

from to     return-val
1    17     A
17   35     B
35   38     C
38   56     D
56   72     E
72   88     F
88   98     G
98   104    H
104  115    I
115  120    J
120  123    K
123  129    L
129  infinity   M

Значения являются фиксированными и не изменяются.

Я думал, что потребуется таблица поиска, но есть ли способ сделать это с помощью функции аналитической функции внутри oracle?

Ответы [ 3 ]

4 голосов
/ 12 апреля 2010

Думаю, я бы использовал таблицу сопоставления:

отображение

to  ret
17  A
38  B

Select Max(ret)
From mapping
Where x <= to

Вы также можете использовать CASE WHEN:

Select Case When x <= 17 Then 'A'
            When x <= 35 Then 'B'
            When x <= 38 Then 'C'
            ...
            Else 'M' End
From your_table
1 голос
/ 12 апреля 2010

Я бы создал функцию в oracle, так как она должна быть более эффективной, чем поиск по таблице (обходной путь на диск никогда не будет)

CREATE OR REPLACE Function ValueFromRange
   ( n IN number )
   RETURN varchar2
IS
  ret varchar2;
BEGIN
ret := -1; -- UNDEFINED?
IF n >= 1 and n <= 17 THEN
   ret := 'A';
ELSIF n >= 18 and n <= 35 THEN
   ret := 'B';
ELSIF n >= 36 and n <= 38 THEN
   ret := 'C';
ELSIF n >= 39 and n <= 56 THEN
   ret := 'D';
ELSIF n >= 57 and n <= 72 THEN
   ret := 'E';
ELSIF n >= 73 and n <= 88 THEN
   ret := 'F';
ELSIF n >= 89 and n <= 98 THEN
   ret := 'G';
ELSIF n >= 99 and n <= 104 THEN
   ret := 'H';
ELSIF n >= 105 and n <= 115 THEN
   ret := 'I';
ELSIF n >= 116 and n <= 120 THEN
   ret := 'J';
ELSIF n >= 121 and n <= 123 THEN
   ret := 'K';
ELSIF n >= 124 and n <= 129 THEN
   ret := 'L';
ELSIF n >= 130 THEN
   ret := 'M';
END IF;
RETURN ret;

END;
1 голос
/ 12 апреля 2010

SQL-серверы спроектированы таким образом, что работа с таблицей выполняется быстрее, чем когда-либо, особенно когда в этой таблице будет всего 13 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...