MYSQL 피벗 테이블 질문 드립니다. 0 3 2,558

by Atreyu [MySQL] MYSQL PIVOT [2019.02.28 15:53:26]


질문 내용이 정확한지 모르겠네요.. 어떻게 구현해야 할 지 감이 안잡힙니다. 

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)
           
           

 

by 마농 [2019.02.28 16:14:37]

피벗을 위한 코드값은 고정값으로 미리 정해져 있어야 합니다.
가변값에 대한 피벗은 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
;

 


by Atreyu [2019.02.28 16:26:10]

B 테이블의 데이터가 계속 변하기 때문에 질문을 드린거였는데 불가능 한거였군요..

동적 쿼리라 하심은 프로시저를 말씀하시는 건가요?


by 마농 [2019.02.28 16:31:27]

코드가 위와 같이 (날짜 + 숫자) 방식인가요?
숫자만 봤을 때 고정값이라고 볼 수 있다면?
또힌 갯수도 3개 고정이라면? 위 정적쿼리 방법으로 가능할 듯 합니다.
동적 쿼리는 프로그래밍을 통해 SQL 텍스트를 동적으로 만들어 내는 것을 말합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입