질문 내용이 정확한지 모르겠네요.. 어떻게 구현해야 할 지 감이 안잡힙니다.
A 라는 테이블에 A1, A2, A3, A4(B테이블의 코드값), A5(수량) 라는 컬럼이 있습니다.
B 라는 테이블에 B1, B2, B3 라는 컬럼이 있습니다.
A4 컬럼은 B 테이블의 값 중 하나의 값입니다.
여기서 뽑아내고 싶은 테이블의 형태는 A1, A2, A3는 전부 GROUP BY하고 A5는 sum을 하는데 최종적으로
컬럼 A1, A2, A3, B1, B2, B3
값 그룹핑된 A1, 그룹핑된 A2, 그룹핑된 A3, (B1에 해당하는 A5의 합), (B2에 해당하는 A5의 합), (B3에 해당하는 A5의 합)
정확한 내용을 잘 전달한 건지 모르겠네요..
일단 B테이블의 값들을 어떻게 A테이블의 헤더로 붙일지 감이 오지 않고 어느 부분에서 sum을 해야 하는지 감이 잡히질 않습니다..
감사합니다!
내용 추가합니다. 정확한 데이터가 보여야 할 것 같아서요 ㅠ
A 테이블 예시입니다.
production_code | company_code | car_code | reason_code | reason_cnt |
20190228105342428490 | 20180827000000000005 | 20190213162624401416 | 20180828000000000001 | 5 |
20190228105342486856 | 20180827000000000005 | 20190213162618954356 | 20180827000000000002 | 4 |
20190228111432350518 | 20180827000000000006 | 20190213162624401416 | 20180827000000000002 | 5 |
20190228152804787870 | 20180827000000000007 | 20190213162618954356 | 20180827000000000003 | 5 |
B테이블 예시입니다.
reason_code | reason_name |
20180828000000000001 | 불량1 |
20180828000000000002 | 불량2 |
20180828000000000003 | 불량3 |
최종 테이블 예시입니다.
production_code | company_code | car_code | 불량1 | 불량2 | 불량3 |
sum(reason_cnt) | sum(reason_cnt) | sum(reason_cnt) | |||
피벗을 위한 코드값은 고정값으로 미리 정해져 있어야 합니다.
가변값에 대한 피벗은 SQL 만으로는 불가능 합니다.
코드가 가변적이라면? 동적 쿼리 이용해야 합니다.
WITH t_a AS ( SELECT 1 gb1, 2 gb2, 3 gb3, 1 cd, 5 cnt UNION ALL SELECT 1, 2, 3, 2, 4 UNION ALL SELECT 1, 2, 3, 3, 3 UNION ALL SELECT 1, 2, 1, 1, 1 ) SELECT gb1, gb2, gb3 , IFNULL(SUM(CASE cd WHEN 1 THEN cnt END), 0) cnt_1 , IFNULL(SUM(CASE cd WHEN 2 THEN cnt END), 0) cnt_2 , IFNULL(SUM(CASE cd WHEN 3 THEN cnt END), 0) cnt_3 FROM t_a GROUP BY gb1, gb2, gb3 ;