在 oracle 中列出的硬编码项目

Posted

技术标签:

【中文标题】在 oracle 中列出的硬编码项目【英文标题】:hardcode item to list in oracle 【发布时间】:2020-03-05 15:28:42 【问题描述】:

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

这是查询:

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 以及我运行查询时要显示的其他项目?

【问题讨论】:

【参考方案1】:

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

【讨论】:

您好,感谢您的意见。第一个查询添加了一个值为Expired 的新列,但我需要添加一个新行而不是一个新列。您能否详细说明第二个查询?因为运行它会返回以下错误ORA-01785: ORDER BY item must be the number of a SELECT-list expression 我更新了我的答案。它现在应该适合你。我只需将 2 个数据集合并在一起,最后按顺序进行排序。有不明白的地方告诉我

以上是关于在 oracle 中列出的硬编码项目的主要内容,如果未能解决你的问题,请参考以下文章

Lint报告“命名空间中的硬编码包”

替代视图中的硬编码网址

通过 findById 访问活动布局中的硬编码片段

如何在 swift 2.0 中翻译我的硬编码字符串? [复制]

如何在 wix 中提供 sourceDir 的硬编码路径

如何修改代码中的硬编码问题