질문 드립니다. 0 2 1,693

by 신입개발자 [SQL Query] [2014.10.15 14:08:20]


WITH A AS( SELECT '002' AS A1 FROM DUAL UNION ALL

SELECT '003' AS A1 FROM DUAL UNION ALL

SELECT '006' AS A1 FROM DUAL UNION ALL

SELECT 'P001' AS A1 FROM DUAL UNION ALL

SELECT 'P002' AS A1 FROM DUAL UNION ALL

SELECT 'P003' AS A1 FROM DUAL UNION ALL

SELECT 'P004' AS A1 FROM DUAL UNION ALL

SELECT 'P005' AS A1 FROM DUAL )

SELECT A1 FROM A

 이렇게 했을때는

002

003

006

P001

P002

P003

P004

P005

이런식으로 나오는데

002

P002

003

P003

006

P001

P004

P005

이런식으로 P가 붙은것중에 P가 안붙은것과 같은것이 있다면 P가 바로다음으로나오고 P가붙은 나머지들은 맨뒤로 오게 하려고 하는데 좋은 방법을 알려주시면 감사하겠습니다

by 백면서생 [2014.10.15 14:34:58]
-- 급조해봤습니다.

select a1
from
(
select a1,num,count(a1) over (partition by num) cnt
from
(
select a1,regexp_replace(a1,'[^0-9]') num
from A
)
)
order by cnt desc ,decode(cnt,1,a1,num)

 


by 김치찌게 [2014.10.15 16:00:39]
select a1
from 
(
  select a1, rownum rn
  from A
)
order by min(rn) over (partition by regexp_replace(a1,'[^0-9]')), a1
/

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입