인조건으로 변환? 0 14 1,249

by 그루비 [Oracle 기초] [2018.11.02 16:15:46]


select * from

where deptcd in (

select listagg(dept_code,''',''') within group (order by dept_code)

from tot_dept

where dept_id in ('A','B','C')

)

혹시 listagg로 인조건 형식에 맞게 넣을 수 있나요?

모바일로 작성을 해서 오타가 있을 수 있습니다.

by 야신 [2018.11.03 18:47:36]
select * from 테이블
where deptcd in (
select dept_code
from tot_dept
where dept_id in ('A','B','C')
)

이렇게는 안되는건가요?


by 그루비 [2018.11.05 18:05:42]

제가 이상하게 꼬아서 생각을 했네요 ;;;


by 마농 [2018.11.05 09:20:32]

값의 집합을 하나의 문자열로 묶어서 조건 주는게 아닙니다.
값의 집합 자체를 IN 조건으로 주는 것입니다.
야신님 답글 참조하세요.


by 마농 [2018.11.05 16:11:34]

정확한 목적이 뭔가요?
 - 1. IN 조건을 줘서 최종 결과물을 뽑아 내는 것? ==> 야신님 답글
 - 2. IN 조건에 들어갈 텍스트를 만들어  내는 것? ==> listagg 사용.
2번처럼 만들어서 IN 조건에 직접 줄 수는 없습니다.
2번처럼 사용하려면 동적쿼리를 써야 합니다.
화면 전환을 해서 조건이 다음화면으로 넘어가는거라면 2번처럼 해서 동적쿼리 해도 되지만.
그게 아니라 그냥 하나의 SQL로 작성하는 거라면 1번 방법 사용하면 됩니다.


by 그루비 [2018.11.05 16:24:49]

정확한 목적 : 해당 데이터가 저희 데이터랑 다르게 코드화가 되어 있어 이 데이터를 저희가 쓰는 코드화 시키려는 작업을 하려고 합니다.

제가 질문하는 내용이 안에 있는 IN조건은 해당 연계데이터를 저희가 쓰는 코드로 변환 하는 작업입니다.

밖에 있는 IN 조건이 실제 이행을 하려고 하는 작업입니다.


by 마농 [2018.11.05 16:27:07]

야신님 답변 참조하면 될 것 같은데? 아닌가요?


by 그루비 [2018.11.05 18:06:12]

맞습니다.;;


by 마농 [2018.11.05 18:23:36]

답은 이미 나와 있는데.
계속 같은 질문만 반복하셔서,
같은 답변만 반복적으로 할 수 밖에 없는데.
"이 방법은 아닌것 같다" 라는 판단으로 실행조차 안해보신 듯 하네요?
"선실행 후판단" 입니다.


by 그루비 [2018.11.05 18:28:09]

죄송합니다.

정확한 목적이 listagg로 사용해서 텍스트 만들어서 하는거여서 그랬습니다.

그냥 단순하게 하면되는건데 생각을 꼬아서 만든 저의 죄입니다.


by 마농 [2018.11.05 18:47:15]

아 또 헷갈리게 하시네요?
listagg 는 목적이 아니라 목적을 달성하기 위한 수단 아닌가요?
목적은 최종 결과 출력 아닌가요?
질문하실 때 최종목적을 가지고 질문하시는게 좋습니다.
수단이나 과정을 가지고 질문하시면 헷갈립니다.
해당 중간 처리과정이 최적의 방안이 아닐 수 있습니다.


by 그루비 [2018.11.05 18:51:06]

다시 정리하자면   listagg로

IN조건에 들어가게 만들고 싶었습니다.

최초 생각이 listagg로 IN조건에 맞게 'A','B','C'를 조회로 1줄로 작을 홀표까지 나오게 'D','E','F' 나오는게 목적이였습니다.

 


by 마농 [2018.11.05 18:59:22]

'D','E','F' 나오는게 목적이라면? ListAgg 사용하면 됩니다.
다만 이 결과가 나오는 SQL문을 IN 절에 바로 넣을 수는 없습니다.
결과만 따로 텍스트로 받아서 동적쿼리로 IN 절에 넣어야 합니다.
 

SELECT '''' || LISTAGG(dept_code, ''',''') WITHIN GROUP(ORDER BY dept_code) || '''' in_str
  FROM tot_dept
 WHERE dept_id IN ('A','B','C')
;

 


by 그루비 [2018.11.05 19:35:04]

바로 재사용이 안되는 군요 ㅠ

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