작년 1월에 위 제목으로 문의를 올려 마농님께서 아래와 같은 답을 주셔서 잘 이용 하였습니다.
WITH t AS
(
SELECT '1' cd1, 'A' cd2, 'a' cd3 FROM dual
UNION ALL SELECT '1', 'A', 'a' FROM dual
UNION ALL SELECT '1', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'b' FROM dual
UNION ALL SELECT '2', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
)
SELECT gb
, cd
, COUNT(*) cnt
FROM t
UNPIVOT (cd FOR gb IN (cd1, cd2, cd3))
GROUP BY gb, cd
ORDER BY gb, cd
그런데 얼마전 건수가 대량 테이블의 컬럼별 건수가 약간씩 오차가 나는 테이블이 생겨 확인 해 보니 컬럼에 값이 없을때 컬럼이 null 이면 빠지더군요
이전 테스트한 테이블들은 모두 값이있어서(not null)이어서 문제가 없었습니다.
여러가지로 제가 해봤으나 모두 원하는 답을 찾지 못해 다시 문의 드립니다.
SELECT '1' cd1, 'A' cd2, 'a' cd3 FROM dual
UNION ALL SELECT '1', 'A', 'a' FROM dual
UNION ALL SELECT '1', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'a' FROM dual
UNION ALL SELECT '2', 'B', 'b' FROM dual
UNION ALL SELECT '2', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'b' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
UNION ALL SELECT '3', 'C', 'c' FROM dual
UNION ALL SELECT '', 'C', 'c' FROM dual
UNION ALL SELECT '', 'C', 'c' FROM dual
UNION ALL SELECT '', 'C', 'c' FROM dual
이런식으로 cd1에 값이 없는 경우는 모두 빠지더군요. 이번에도 고수님들의 지도 부탁드립니다.
제가 끼어서 죄송합니다~ unpivot에 include nulls 옵션을 사용하시면 될 듯합니다~
UNPIVOT INCLUDE NULLS (cd FOR gb IN (cd1, cd2, cd3))
퇴근 후 혹시나하고 로그인 했는데 역시 반가운 소식이 기다리고 있었네요 ~~
이런 옵션이 있었는지 몰랐는데 감사 합니다.
월요일에 출근 하면 당장 적용해 보고 결과를 다시 올리겠습니다. 너무 감사합니다.
그리고 어느분의 지혜든 빌릴 수 있는 저에게는 늘 고마운 일 입니다.
올려 주신 내용을 오늘 출근 하여 적용 해 보니 원하는 값이 잘 나옵니다.
기존에는 테이블 생성 시 컬럼에 not null 조건이 있는 컬럼을 대상으로만 테스트(적용) 하여 문제가 발견 되지 않았고
null이 존재 하는 컬럼에서 오차가 있다는걸 알지 못했었는데 맞는 답이 나와 감사할 따름 입니다.
언제나 처럼 좋은 내용 또하나 배워갑니다.