0

请在下面找到场景。

视图al_name_vw

无名

1 穆鲁甘
2 xxxx
3 年
4 bbbb
5 啊啊啊

我已经从参考光标中获取数据,如下所示。

open p_ref_name for
 select  anv.no,
         anv.Name
 from    al_name_vw anv 
order by anv.name;

所以我得到的结果是

无名

5 啊啊啊
4 bbbb
1 穆鲁甘
2 xxxx
3 年

现在我需要修改逻辑以检索如下记录。

无名

5 啊啊啊
4 bbbb
2 xxxx
3 年
1 穆鲁甘
4

3 回答 3

0
select anv.no,
       anv.Name
  from al_name_vw anv 
 order by case when substr(anv.Name,1,1) = lower(substr(anv.Name,1,1)) --ensures names starting
                    then 1                                             --with lowercase come first
                    else 2
                end,
          anv.Name;
于 2013-09-12T08:00:02.913 回答
0

像这样试试

WITH
     T AS
     ( SELECT 1 NO, 'Murugan' NAME FROM dual
     UNION
     SELECT 2, 'xxxxx' FROM DUAL
     UNION
     SELECT 3, 'yyyyy' FROM DUAL
     UNION
     SELECT 4, 'bbbbb' FROM dual
     UNION
     SELECT 5, 'aaaaa' FROM DUAL
     )
SELECT *
FROM t
ORDER BY
     TRANSLATE (NAME, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

您的查询,

OPEN p_ref_name FOR
 SELECT  anv.NO,
         anv.NAME
 FROM    al_name_vw anv 
ORDER BY 
     TRANSLATE (NAME, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
于 2013-09-12T08:00:23.640 回答
0

对于您的结果集,我猜您需要首先重复相同字符的名称,然后是不重复的名称。使用下面的查询。如果这不是您想要的,请使用问题背后的逻辑更新您的问题。

 select  anv.no,
     anv.Name
  from  (select  no,
     Name, case when regexp_like(Name,'^(.)\1+$') then 1 else 2 end rn
  from    al_name_vw ) anv
  order by rn
于 2013-09-12T10:35:45.247 回答