데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요
name | date
A | 1월
A | 2월
B | 1월
B | 2월
B | 2월
B | 4월
C | 5월
...
월별 통계를 내려고 하는데요
이런 형식에서 pivot을 만들면
A B C D
1월 1 1 0 0
2월 1 2 0 0
4월 0 0 0 0
5월 0 0 1 0
이렇게 3월이 빠지게 되는데 해당 월에 데이터가 없어도 1월부터12까지 모두 세로로 표시가 되게 하려면 어떤 방법이 좋을까요
월을 가로로 표기할려고 하면 D라는 항목이 데이터가 하나도 없어서 표기가 안되서 똑같은 고민입니다..
참고하세요
with tbl as (
select 'A' nm, '01월' dt union all
select 'A' nm, '02월' dt union all
select 'B' nm, '01월' dt union all
select 'B' nm, '02월' dt union all
select 'B' nm, '02월' dt union all
select 'B' nm, '04월' dt union all
select 'C' nm, '05월' dt
),
mon as (
select '01월' dt union all
select '02월' dt union all
select '03월' dt union all
select '04월' dt union all
select '05월' dt union all
select '06월' dt union all
select '07월' dt union all
select '08월' dt union all
select '09월' dt union all
select '10월' dt union all
select '11월' dt union all
select '12월' dt
)
select mon.dt
, count(case when nm = 'A' then 1 end) nm_A
, count(case when nm = 'B' then 1 end) nm_B
, count(case when nm = 'C' then 1 end) nm_C
, count(case when nm = 'D' then 1 end) nm_D
from mon
left outer join tbl
on tbl.dt = mon.dt
group by mon.dt