database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40329 게시물 읽기
No. 40329
select 할때 order by 질문 드립니다
작성자
진현철(raper45rpm)
작성일
2013-12-06 11:26ⓒ
2013-12-06 11:26ⓜ
조회수
6,863

안녕하세요,, pl/sql로 프로시져를 하고 있는데,, 궁금 사항이 생겨서 질문 드립니다

일단 쿼리는

 SELECT
                   A.CHANGE_NUMBER                      
                  ,LPAD(ROWNUM,4,0)  ------------------------------- seq 생성                     
                  ,CASE WHEN CHANGE_OUT = A.ID THEN 'D'  --------------------D OR A 입력
                        WHEN CHANGE_IN  = A.ID THEN 'A' END 

                  ,I.ITEM_NUMBER   AS  P_ITEM_NUMBER    
                  ,sF_ITEM       ( nSubIdx      )      
                  ,B.ITEM_NUMBER   AS  C_ITEM_NUMBER    
                  ,SUBSTRB ( NVL(C.LABEL , F.TEXT ) ,1,40)               
                  ,''                                    
                  ,DECODE ( C.LABEL , NULL , B.QUANTITY , 1 )    AS  QUANTITY         
                  ,( SELECT ENTRYVALUE FROM LISTENTRY L012 WHERE P.LIST05 = L012.ENTRYID AND L012.PARENTID = 2472782   AND L012.LANGID = 0 )
                  ,DECODE ( CHANGE_OUT, 0, R.REV_NUMBER , '' ) 

               FROM CHANGE     A
                   ,REV        R
                   ,ITEM       I
                   ,ITEM_P2P3  P
                   ,BOM        B
                   ,REFDESIG   C
                   ,AGILE_FLEX F
               WHERE  A.CHANGE_NUMBER   = mF_ECO_NO     ( nMainLoopIdx )
                 AND  I.ITEM_NUMBER     = sF_ITEM       ( nSubIdx      )
                 AND  B.CHANGE_OUT  != B.CHANGE_IN
                 AND (B.CHANGE_IN = A.ID OR B.CHANGE_OUT=A.ID)
                 AND  B.ITEM      = R.ITEM
                 AND  I.ID        = R.ITEM
                 AND  R.CHANGE    = A.ID
                 AND  B.ITEM_NUMBER = P.ITEM_NUMBER
                 AND  B.ID        = C.BOM(+)
                 AND  B.ID        = F.ROW_ID (+)
                 AND  B.ITEM      = F.ID (+)
                 AND  F.ATTID(+) = '1036'
                 AND  F.CLASS(+)  = '10000'

 

이렇습니다,,,, 제가 하고 싶은 것은 쿼리의 빨간색으로 되어있는 부분중 D OR A 로 만들어주는 부분에서

저는 무조건 D 를 SEQ가 높게 하고 싶습니다

 

예를 들어 현재는 아래와 같이  D / A 순서가 뒤죽박죽으로 SEQ가 생성이 됩니다

홍길동 0001 A 대학생 군인
김민호 0002 D 고딩 중딩
김철수 0003 D 초딩 중딩
안철수 0004 A 대딩 고딩
         

이내용을 SELECT 할때 아래와 같이 D부터 SEQ를 입력하게 하고 싶은데 어떻게 변경해야 할까요?

김민호 0001  D 고딩
김철수 0002 D 초딩
홍길동 0003 A 대학생
안철수 0004 A 대딩
       

이렇게 하고 싶습니다

감사합니다

좋은 하루 되세요

 

이 글에 대한 댓글이 총 7건 있습니다.

case when change_out = a.id then 'D' when change_in = a.id then 'A' END     AS 알리아싱

 

order by 알리아싱 desc

채용근(taiji97)님이 2013-12-06 12:34에 작성한 댓글입니다.

SELECT LPAD ( ROWNUM, 4, '0' ) SEQ

    FROM (

위의 쿼리

ORDER BY 알리아싱 DESC

)

채용근(taiji97)님이 2013-12-06 12:35에 작성한 댓글입니다.

채용근님 답변 감사합니다

말씀하신 쿼리가

   ,SELECT LPAD ( ROWNUM, 4, '0' ) SEQ
                       FROM (
                      CASE WHEN CHANGE_OUT = A.ID THEN 'D' WHEN CHANGE_IN  = A.ID THEN 'A' END AS FLAG
                       ORDER BY FLAG DESC
                       )

이거 맞나요? 이렇게 하면 에러가 발생하네요ㅜㅜ

진현철님이 2013-12-06 14:35에 작성한 댓글입니다. Edit

이렇게요~_~;;;

 

 SELECT
                   A.CHANGE_NUMBER                     
                   ,LPAD(ROWNUM,4,0)  ------------------------------- seq 생성                    
                   ,CASE WHEN CHANGE_OUT = A.ID THEN 'D'  --------------------D OR A 입력
                         WHEN CHANGE_IN  = A.ID THEN 'A' END AS HAHA
                   ,I.ITEM_NUMBER   AS  P_ITEM_NUMBER    
                  ,sF_ITEM       ( nSubIdx      )      
                  ,B.ITEM_NUMBER   AS  C_ITEM_NUMBER    
                  ,SUBSTRB ( NVL(C.LABEL , F.TEXT ) ,1,40)               
                  ,''                                    
                  ,DECODE ( C.LABEL , NULL , B.QUANTITY , 1 )    AS  QUANTITY         
                  ,( SELECT ENTRYVALUE FROM LISTENTRY L012 WHERE P.LIST05 = L012.ENTRYID AND L012.PARENTID = 2472782   AND L012.LANGID = 0 )
                  ,DECODE ( CHANGE_OUT, 0, R.REV_NUMBER , '' )
               FROM CHANGE     A
                    ,REV        R
                    ,ITEM       I
                    ,ITEM_P2P3  P
                    ,BOM        B
                    ,REFDESIG   C
                    ,AGILE_FLEX F
                WHERE  A.CHANGE_NUMBER   = mF_ECO_NO     ( nMainLoopIdx )
                  AND  I.ITEM_NUMBER     = sF_ITEM       ( nSubIdx      )
                  AND  B.CHANGE_OUT  != B.CHANGE_IN
                  AND (B.CHANGE_IN = A.ID OR B.CHANGE_OUT=A.ID)
                 AND  B.ITEM      = R.ITEM
                  AND  I.ID        = R.ITEM
                  AND  R.CHANGE    = A.ID
                  AND  B.ITEM_NUMBER = P.ITEM_NUMBER
                  AND  B.ID        = C.BOM(+)
                  AND  B.ID        = F.ROW_ID (+)
                  AND  B.ITEM      = F.ID (+)
                  AND  F.ATTID(+) = '1036'
                  AND  F.CLASS(+)  = '10000'
ORDER BY HAHA DESC

박성빈(빈이님)님이 2013-12-06 16:28에 작성한 댓글입니다.

SELECT LPAD(ROWNUM,4,0) ------------------------------- seq 생성

, a.*

FROM (

SELECT

A.CHANGE_NUMBER

,CASE WHEN CHANGE_OUT = A.ID THEN 'D' --------------------D OR A 입력

WHEN CHANGE_IN = A.ID THEN 'A' END AS ODR

,I.ITEM_NUMBER AS P_ITEM_NUMBER

,sF_ITEM ( nSubIdx )

,B.ITEM_NUMBER AS C_ITEM_NUMBER

,SUBSTRB ( NVL(C.LABEL , F.TEXT ) ,1,40)

,''

,DECODE ( C.LABEL , NULL , B.QUANTITY , 1 ) AS QUANTITY

,( SELECT ENTRYVALUE FROM LISTENTRY L012 WHERE P.LIST05 = L012.ENTRYID AND L012.PARENTID = 2472782 AND L012.LANGID = 0 )

,DECODE ( CHANGE_OUT, 0, R.REV_NUMBER , '' )

 

FROM CHANGE A

,REV R

,ITEM I

,ITEM_P2P3 P

,BOM B

,REFDESIG C

,AGILE_FLEX F

WHERE A.CHANGE_NUMBER = mF_ECO_NO ( nMainLoopIdx )

AND I.ITEM_NUMBER = sF_ITEM ( nSubIdx )

AND B.CHANGE_OUT != B.CHANGE_IN

AND (B.CHANGE_IN = A.ID OR B.CHANGE_OUT=A.ID)

AND B.ITEM = R.ITEM

AND I.ID = R.ITEM

AND R.CHANGE = A.ID

AND B.ITEM_NUMBER = P.ITEM_NUMBER

AND B.ID = C.BOM(+)

AND B.ID = F.ROW_ID (+)

AND B.ITEM = F.ID (+)

AND F.ATTID(+) = '1036'

AND F.CLASS(+) = '10000'

ORDER BY ODR DESC

) a

채용근(taiji97)님이 2013-12-06 17:04에 작성한 댓글입니다.
이 댓글은 2013-12-06 17:04에 마지막으로 수정되었습니다.

아 맞다;;

ORDER BY 한걸 감싸고 ROWNUM 했어야했죠;;

 

박성빈(빈이님)님이 2013-12-06 17:06에 작성한 댓글입니다.

답변 정말 감사드립니다,,,두분 덕분에 해결했어요 감사합니다

좋은 하루 되세요~

진현철님이 2013-12-09 08:36에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40332select 후 insert 질문 드립니다 [5]
진현철
2013-12-09
7008
40331계층구조 상위 집계 방법에 대하여 문의드립니다. [6]
김흥수
2013-12-06
7793
40330outter조인을 할 수 없는 커리문이라서 문의 드립니다. [11]
야간비행
2013-12-06
7842
40329select 할때 order by 질문 드립니다 [7]
진현철
2013-12-06
6863
40328서로 다른 seq를 가진 데이터를 조회하려고 합니다. [5]
초봉이
2013-12-05
5884
40327delete 시 ORA-30036 에러문제 [1]
정재영
2013-12-04
6499
40326KSC5601 에서 한글 문제로 문자셑을 바꾸려고 하는데 추천 부탁드립니다. [2]
박재덕
2013-12-03
6166
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다