Жесткий код для перечисления в oracle - PullRequest
1 голос
/ 05 марта 2020

У меня следующий запрос, в котором перечислены элементы в указанном порядке c, который я хотел. Теперь я хочу жестко закодировать значение, которое будет отображаться вместе с другими значениями, но это значение не существует в моей таблице, и я не хочу его добавлять.

Вот запрос:

select item_name from item_table
order by 
    case 
        when item_name = 'New' then 1 
        when item_name = 'In Progress' then 2
        when item_name = 'Passed' then 3
        when item_name = 'Exempt' then 4
    else 5
    end, item_name;

Ожидаемые результаты, которые мне нужны

New
In Progress 
Passed
Expired
Exempt

Фактические результаты, которые я получаю:

New 
In Progress
Passed
Exempt 

Is Есть ли способ жестко кодировать Expired вместе с другими элементами, которые будут отображаться при выполнении запроса?

1 Ответ

1 голос
/ 05 марта 2020

Используется таблица ddl и инструкция вставки.

  CREATE TABLE ITEM_TABLE
   (    ITEM_NAME VARCHAR2(20 CHAR)
   ) ;


Insert into ITEM_TABLE (ITEM_NAME) values ('NEW');
Insert into ITEM_TABLE (ITEM_NAME) values ('In Progress');
Insert into ITEM_TABLE (ITEM_NAME) values ('passed');
Insert into ITEM_TABLE (ITEM_NAME) values ('Exempt');

Если я вас правильно понимаю. Это должно сделать это.

 SELECT
    *
FROM
    (
        SELECT
            item_name
        FROM
            item_table
        UNION
        SELECT
            'hard_coded_Value' item_name
        FROM
            item_table
    )
ORDER BY
    CASE
        WHEN item_name = 'New'          THEN
            1
        WHEN item_name = 'In Progress'  THEN
            2
        WHEN item_name = 'Passed'       THEN
            3
        WHEN item_name = 'Exempt'       THEN
            4
        WHEN ITEM_NAME = 'hard_coded_Value' then
        5
        ELSE
            6
    END,
    item_name;

Я не могу действительно проверить запрос, так как вы не предоставили некоторые ddl для тестирования, но это, как правило, как я бы решил эту проблему.

...