세로데이타를 가로로 출력하고 싶습니다. 0 3 4,196

by 천고민선 [MySQL] [2011.06.16 19:17:24]


안녕하세요.
아래의 데이타와 같이 약 30개정도의 업체가 있습니다.
데이타는 30개의 업체가 월별로 저장을 합니다.
간혹 저장을 안하는 업체도 있구요.

아래의 데이타의 키는 accmon,centerno입니다.
데이타는 aa1과 ab1을 업체가 등록을 합니다.
 
A업체 
accmon aa1 ab1 centerno
1 120 230 2222
2 123123 123 2222
3 234 0 2222
4 0 0 2222
5 123 0 2222
6 1230 1230 2222
B업체
accmon aa1 ab1 centerno
1 0 0 1111
2 0 1231244324 1111
6 234234 2342 1111


위의 데이타을 아래의 표와같이 출력을 하려 합니다.
아래의 표는 1월부터 6월까지 나와있지만
실제로는 1월부터 12월까지 조절을 할 수가 있습니다.

  1월 2월 3월 4월 5월 6월
aa1 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체 1월부터 6월까지의 합
ab1 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체의 합 a+b업체 1월부터 6월까지의 합
 총계 위두셀의 합 위두셀의 합 위두셀의 합 위두셀의 합 위두셀의 합 위두셀의 합 위두셀의 합

case문을 쓰면 될것 같은데 잘 안되네요.

많은 도움 부탁드리겠습니다.

감사합니다.
by 마농 [2011.06.17 08:29:39]
WITH t AS
(
SELECT 1 accmon, 120 aa1, 230 ab1, 2222 centerno FROM dual
UNION ALL SELECT 2, 123123, 123, 2222 FROM dual
UNION ALL SELECT 3, 234, 0, 2222 FROM dual
UNION ALL SELECT 4, 0, 0, 2222 FROM dual
UNION ALL SELECT 5, 123, 0, 2222 FROM dual
UNION ALL SELECT 6, 1230, 1230, 2222 FROM dual
UNION ALL SELECT 1, 0, 0, 1111 FROM dual
UNION ALL SELECT 2, 0, 1231244324, 1111 FROM dual
UNION ALL SELECT 6, 234234, 2342, 1111 FROM dual
)
, copy_t AS
(
SELECT 'aa1' gubun FROM dual
UNION ALL
SELECT 'ab1' gubun FROM dual
)
SELECT gubun AS "구분"
, SUM(CASE WHEN accmon = 1 THEN v END) AS "1월"
, SUM(CASE WHEN accmon = 2 THEN v END) AS "2월"
, SUM(CASE WHEN accmon = 3 THEN v END) AS "3월"
, SUM(CASE WHEN accmon = 4 THEN v END) AS "4월"
, SUM(CASE WHEN accmon = 5 THEN v END) AS "5월"
, SUM(CASE WHEN accmon = 6 THEN v END) AS "6월"
, SUM(v) AS "계"
FROM
(
SELECT gubun
, accmon
, SUM(CASE WHEN gubun = 'aa1' THEN aa1 WHEN gubun = 'ab1' THEN ab1 END) AS v
FROM t, copy_t
GROUP BY gubun, accmon
)
GROUP BY ROLLUP(gubun)
;

by 천고민선 [2011.06.17 10:13:55]
마농님 소중한 답변 감사합니다.
물어볼게 있는데요.
제가 위에도 써놨듯이 달의 기간을 선택을 할 수가 있습니다.
예로 1월-3월,2월-6월,2월-12월 이런식으로요.
이럴때는 어떻게 해야 할까요?
그리고 아래식은 오라클용인가요?

by 마농 [2011.06.17 11:06:13]
오라클용이긴 하지만 mysql에서도 그대로 될듯 합니다.
열을 가변적으로 조절하려면 정적쿼리로는 안되고 동적쿼리를 사용해야 합니다.
프로그램에서 ,SUM(CASE ) 부분을 조건에 맞게 붙이시면 됩니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입