在 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 中列出的硬编码项目的主要内容,如果未能解决你的问题,请参考以下文章