首页 > 解决方案 > 在 oracle 中列出的硬编码项目

问题描述

我有以下查询,它以我想要的特定顺序列出项目。现在我想硬编码一个要与其他值一起显示的值,但这个值在我的表中不存在,我不想添加它。

这是查询:

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 

有没有办法Expired在我运行查询时对要显示的其他项目进行硬编码?

标签: sqldatabaseoraclecase

解决方案


使用表 ddl 和 insert 语句。

  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 进行测试,但这通常是我解决此类问题的方式。


推荐阅读