簡體   English   中英

按SELECT-LIST順序返回LOV

[英]Return of LOV in SELECT-LIST order by output

在我的應用程序中,我有一個頁面,用戶應該可以通過選擇列表為任務選擇創建者,該選擇列表從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的簡單order by d desc對我不起作用。 我不知道是否可以在我的ApEx頁面的設置或SQL代碼本身中解決它。
希望您了解我的問題並提出解決方案:)

在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

在獲得下表的定義后,

 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 * 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;

表格不包含任何CID列,因此無法正常工作。 因此,刪除CID列后,

  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;

輸出為:

 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

因此,所有不活動的數據最后出現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM