데이터 연결이 포함 된 단일 열을 사용하여 출력물을 구축하면 약간 다른 방식으로 시도 할 수 있습니다. 모든 사용자가 매일 정확하게 활성이 있다고 가정하면, 당신은 그런 식으로 뭔가를 시도 할 수 있습니다 :
with users(user_id, user_name) as
(
select 1, 'naveen' from dual union all
select 2, 'richard' from dual union all
select 3, 'reddy' from dual
),
user_activity(user_id, Activity, activity_date) as
(
select 1, 'holiday' , date '2016-08-01' from dual union all
select 2, 'working' , date '2016-08-01' from dual union all
select 3, 'training' , date '2016-08-01' from dual union all
select 1, 'working' , date '2016-08-02' from dual union all
select 2, 'working' , date '2016-08-02' from dual union all
select 3, 'working' , date '2016-08-02' from dual
)
select rpad('Date', 16, ' ') || ',' || listagg(rpad(user_name, 16, ' '), ',') within group (order by user_id)
from users
union all
select rpad(to_char(activity_date, 'yyyy-mm-dd'),16, ' ') || ',' || listagg(rpad(activity, 16, ' '), ',') within group (order by user_id)
from users
inner join user_activity using(user_id)
group by activity_date
결과를 :
RPAD('DATE',16,'')||','||LISTAGG(RPAD(USER_NAME,16,''),',')WITHINGROUP(ORDERBYUS
--------------------------------------------------------------------------------
Date ,naveen ,richard ,reddy
2016-08-01 ,holiday ,working ,training
2016-08-02 ,working ,working ,working
나는 네 번째 사람이 추가하는 경우 :
RPAD('DATE',16,'')||','||LISTAGG(RPAD(USER_NAME,16,''),',')WITHINGROUP(ORDERBYUSER_ID)
----------------------------------------------------------------------------------------------------
Date ,naveen ,richard ,reddy ,Fourth Man
2016-08-01 ,holiday ,working ,training ,training
2016-08-02 ,working ,working ,working ,working
을 지금까지 뭐 해봤 어? 3 명 이상의 사용자가 있다면 어떻게 될까요? 다양한 수의 열로 쿼리를 작성 하시겠습니까? – Aleksej
피벗 기능을 통해 작업하고 있습니다. 그러나 사용자가 3 명 이상 없다면 나는 만들 수 없다고 말한 것처럼 최선의 해결책을 찾고 있습니다. –
가변 개수의 열이있는 결과를 반환하는 일반 SQL을 작성할 수 없습니다. 동적 SQL을 빌드하고 실행하면 다양한 수의 컬럼이 제공되지만 그 결과를 처리하는 방법은 무엇입니까? 다른 방법으로, 값의 연결을 포함하는 단일 열을 사용하여 결과를 만들 수 있으며 일부 구분 기호 – Aleksej