ms-sql -> oracle 쿼리로 변경 중입니다. 0 7 998

by 피터슨 [2016.06.01 15:47:16]


 select * from (  
 select row_number() over( order by REGI_DD desc ) as rNum, NO, DEPOSITOR,  
TITL, USR_NM_KOR, USR_NM_ENG, EMAIL, GUBUN, COMP_NM_KOR, FIELD, COMP_NM_ENG, PHONE, TEL, ORA, REQUEST_COURSE, ACCEPT_YN,  
REG_ID, (select COUNT(PT_NO) from FORUM_INFO_DETAIL where PT_NO = FORUM_INFO.NO and REAL_YN = 'Y' ) as DETAIL,  
( select LGD_PAYTYPE from EN_LGD_LOG where RES_CODE = '0000' and PT_NO = FORUM_INFO.NO and RES_MSG = '결제성공' ) as LGD_PAYTYPE,  
( select USR_NM || '('|| USR_E_NM || ')' || ', ' from FORUM_INFO_DETAIL where PT_NO = FORUM_INFO.NO and REAL_YN = 'Y' FOR XML PATH('') ) as DETAIL2

from FORUM_INFO where REAL_YN = 'Y' and GUBUN is not null
) B order by rNum asc ;    

 

이같은 쿼리가 있는데..  수정한다고 했는데 자꾸 오류가 뜹니다. 잘못된 점 알려주시면 감사하겠습니다.

by 마농 [2016.06.01 16:09:35]

detail2 항목은 LISTAGG 함수 이용하시면 됩니다.
http://www.gurubee.net/article/55512


이 쿼리가 만약 페이징 쿼리에 사용되는 서브쿼리라면?
  Select 절에서 사용되는 스칼라서브쿼리는
  페이징 처리 시작 전에 전체 데이터에 대해 처리하는 것 보다는
  페이징 처리가 모두 끝난 뒤에 한페이지에 해당하는 자료에 대해서만 최종 수행하는 것이 좋습니다.
페이징 쿼리가 아니라면?
  스칼라서브쿼리보다는 조인 방식으로 푸는 것이 좋습니다.
  detail 을 우선 Group By 한뒤 조인하는 방식으로 풀어야 합니다.


by 피터슨 [2016.06.01 16:24:11]

감사합니다. 덕분에 정리가 되가고있는데.. 혹시 listagg에 for xml path('')은 못쓰는건가요?


by 마농 [2016.06.01 16:37:24]

for xml path('') 를 listagg 로 바꿔야죠.


by 피터슨 [2016.06.01 16:49:17]

아 이해했습니다!!

죄송하지만 마지막으로 하나만 더물어봐도 될까요?

이런식으로 쿼리를 작성했는데 이름(이름), 이름(이름), 이런식으로 출력할라고 하는데

아래와 같이 짰더니 오류가 납니다..왜그런걸까요;

select listagg(usr_nm||'('||usr_e_nm||')' ,',') within group(order by usr_nm) from FORUM_INFO_DETAIL


by 마농 [2016.06.01 16:56:00]

"에러납니다"라고 툭 던지지 마시고...
어떤 에러가 나는지 구체적으로 제시해 주세요.


조건절이 안보이는데 질문시 생략한건가요?
아니면 실제 쿼리에서 누락시킨 건가요?


by 우리집아찌 [2016.06.01 16:56:10]

인라인뷰로 가공한후 LISTAGG 쓰면 되지않으까요?


by 피터슨 [2016.06.01 16:59:44]

아닙니다 해결했습니다. 따로 쿼리를 실행시키는 바람에 문자열이 너무길다고 떳었는데

조합해서 쓰니 되네요 감사합니다

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