| DATE | NAME |
| 20240424 | 김철수 |
| 20240424 | 강영수 |
| 20240425 | 홍길동 |
아래와 같이 나오게 쿼리가 가능한가요?
| DATE | NAME1 | NAME2 | |
| 20240424 | 김철수 | 김영수 | |
| 20240425 | 홍길동 |
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
동일 날짜에 사람이 3인 이상 있을 때는요?
추출하고 싶은 사람수가 고정이 아니라 N명이라면 위 SQL처럼 고정적으로 사용하시긴 어렵습니다.
Dynamic Sql로 만들어서 사용을 해야합니다.
또는 추출시점에서 사전에 총 일자별 최대인원수를 안다면 위 SQL에서 MAX(~~ 구문에서 최대인원수까지 sql를 만드시면 됩니다.
여러 컬럼이 아닌 하나의 컬럼에 나열해도 상관없다면 아래와 같이 하시면 됩니다.
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
;
덕분에 해결이 되었습니다 감사합니다^^
또 하나 배워갑니다