쿼리 질문 드립니다. 0 5 3,806

by 레드콘 [SQL Query] [2024.04.25 11:39:36]


DATE NAME
20240424 김철수
20240424 강영수
20240425 홍길동

아래와 같이 나오게 쿼리가 가능한가요?

DATE NAME1 NAME2  
20240424 김철수 김영수  
20240425 홍길동    

 

by 최양락 [2024.04.25 13:56:25]
with vw_base as (
	select '20240424' dt, '김철수' name from dual
	uni on all select '20240424' dt, '강영수' name from dual
	uni on all select '20240425' dt, '홍길동' name from dual
)
, vw_ord as (
	select dt, name, row_number() over(partition by dt order by name) ord
	from vw_base
)
select dt
	, max(decode(ord, 1, name, '')) name1
	, max(decode(ord, 2, name, '')) name2
from vw_ord
group by dt
order by dt
 

by jkson [2024.04.25 14:32:24]

동일 날짜에 사람이 3인 이상 있을 때는요?


by 대궁이 [2024.04.25 15:16:43]

추출하고 싶은 사람수가 고정이 아니라 N명이라면 위 SQL처럼 고정적으로 사용하시긴 어렵습니다. 

Dynamic Sql로 만들어서 사용을 해야합니다.

또는 추출시점에서 사전에 총 일자별 최대인원수를 안다면 위 SQL에서 MAX(~~ 구문에서 최대인원수까지 sql를 만드시면 됩니다.


by 신히 [2024.04.25 16:36:50]

여러 컬럼이 아닌 하나의 컬럼에 나열해도 상관없다면 아래와 같이 하시면 됩니다.

with tbl as (
    select '20240424' dt, '김철수' name from dual
    union all select '20240424' dt, '강영수' name from dual
    union all select '20240425' dt, '홍길동' name from dual
)
select dt "DATE", listagg(name, ',') within group(order by dt) "NAME"
  from tbl 
group by dt
;

? 소스 테스트 해보기


by 레드콘 [2024.04.26 10:49:49]

덕분에 해결이 되었습니다 감사합니다^^

또 하나 배워갑니다

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