在我的应用程序中,有一个页面,用户可以通过选择列表从LOV获取其值的选择列表中为任务选择创建者。
多数民众赞成在其中的代码:
select case
when USER_STATUS = '0' then '*INACTIVE* '|| LAST_NAME || ',' || CDISPLAYNAME
else LAST_NAME || ',' || CDISPLAYNAME
end as d, CID r
from TABLE_TEST
order by d asc;
我的表的声明如下。
create TABLE TABLE_TEST(
LAST_NAME VARCHAR2(75 BYTE),
CDISPLAYNAME VARCHAR2(50 BYTE),
USER_STATUS NUMBER DEFAULT 1 --Can also be 0 (inactive) or 3 (System User)
);
所以我的问题是,SELECT-LIST中的返回值显示如下
*INACTIVE* Surname5,Prename5
*INACTIVE* Surname6,Prename6
*INACTIVE* Surname7,Prename7
Surname1,Prename1
Surname2,Prename2
Surname3,Prename3
Surname4,Prename4
但是我希望它看起来像这样
Surname1,Prename1
Surname2,Prename2
Surname3,Prename3
Surname4,Prename4
*INACTIVE* Surname5,Prename5
*INACTIVE* Surname6,Prename6
*INACTIVE* Surname7,Prename7
现在我的问题。我希望标记为 INACTIVE 的用户位于“普通”用户下方,但“普通”用户按字母顺序排列,因此简单的order by d desc
对我不起作用。我不知道是否可以通过我的ApEx页面的设置或SQL代码本身来解决它。
希望您了解我的问题并提出解决方案:)
答案 0 :(得分:1)
在ORDER BY中使用CASE,并在字符串的开头分别添加“ 1”和“ 0”以优先排序
SELECT case
when USER_STATUS = '0' then '*INACTIVE* '|| LAST_NAME || ',' || CDISPLAYNAME
else LAST_NAME || ',' || CDISPLAYNAME
end as d
FROM TABLE_TEST
ORDER BY
CASE WHEN USER_STATUS = '0' THEN '1' || d
ELSE '0' || d
END ASC
答案 1 :(得分:0)
在获得下表的定义后,
select * from table_test;
LAST_NAME CDISPLAYNAME USER_STATUS
A T1 1
B T1 1
B1 T2 0
B2 T3 0
B3 T4 1
下表中插入了一些虚拟数据:
select
case
when USER_STATUS = '0'
then '*INACTIVE* '|| LAST_NAME || ',' || CDISPLAYNAME
else LAST_NAME || ',' || CDISPLAYNAME
end as d, CID r
from TABLE_TEST
order by d asc;
当我触发您在上面发布的给定查询时:
select
case
when USER_STATUS = '0'
then '*INACTIVE* '|| LAST_NAME || ',' || CDISPLAYNAME
else LAST_NAME || ',' || CDISPLAYNAME
end as d
from TABLE_TEST
order by d asc;
表不包含任何CID列,因此无法正常工作。 因此,在删除CID列之后,
D
*INACTIVE* B1,T2
*INACTIVE* B2,T3
A,T1
B,T1
B3,T4
输出为:
WITH T as
(select case
when USER_STATUS = '0'
then '*INACTIVE* '|| LAST_NAME || ',' || CDISPLAYNAME
else LAST_NAME || ',' || CDISPLAYNAME
end as d, CDISPLAYNAME r
from TABLE_TEST
order by d asc)
select * from T order by d desc;
因此更改后的查询为:
D R
B3,T4 T4
B,T1 T1
A,T1 T1
*INACTIVE* B2,T3 T3
*INACTIVE* B1,T2 T2
所以输出是:
getFragmentManager()
所有未激活的数据都最后出现了。