안녕하세요
item기준, store의 종류에 따라 컬럼을 동적으로 뽑고 싶은데 방법을 모르겠습니다(날짜별 sum).
디비는 mysql입니다.
id | item | store | amount | date |
1 | 사과 | A 슈퍼 | 5000 | 20170901 |
2 | 딸기 | O 백화점 | 3000 | 20170901 |
3 | 수박 | P 슈퍼 | 8000 | 20170901 |
4 | 수박 | P 슈퍼 | 6000 | 20170901 |
5 | 딸기 | O 백화점 | 2000 | 20170901 |
6 | 사과 | O 백화점 | 7000 | 20170901 |
7 | 사과 | J 백화점 | 9000 | 20170901 |
8 | 사과 | J 백화점 | 330000 | 20170901 |
9 | 딸기 | A 슈퍼 | 66000 | 20170901 |
10 | 수박 | P 슈퍼 | 13000 | 20170902 |
11 | 수박 | P 슈퍼 | 43000 | 20170902 |
12 | 딸기 | J 백화점 | 78000 | 20170902 |
13 | 사과 | O 백화점 | 43000 | 20170902 |
14 | 사과 | O 백화점 | 39000 | 20170902 |
15 | 딸기 | A 슈퍼 | 20000 | 20170902 |
16 | 수박 | P 슈퍼 | 50000 | 20170902 |
결과값
1. item, 날짜별 sum
A 슈퍼 | O 백화점 | J 백화점 | ||
사과 | 20170901 | 5000 | 7000 | 339000 |
사과 | 20170902 | 0 | 82000 | 0 |
A 슈퍼 | O 백화점 | J 백화점 | ||
딸기 | 20170901 | 66000 | 5000 | 0 |
딸기 | 20170902 | 20000 | 0 | 78000 |
P 슈퍼 | ||
수박 | 20170901 | 14000 |
수박 | 20170902 | 106000 |
2. total, 날짜별 sum
A 슈퍼 | O 백화점 | J 백화점 | P 슈퍼 | ||
사과 | 20170901 | 5000 | 7000 | 339000 | 0 |
사과 | 20170902 | 0 | 82000 | 0 | 0 |
딸기 | 20170901 | 66000 | 5000 | 0 | 0 |
딸기 | 20170902 | 20000 | 0 | 78000 | 0 |
수박 | 20170901 | 0 | 0 | 0 | 14000 |
수박 | 20170902 | 0 | 0 | 0 | 106000 |
감사합니다
SQL 만으로 가변 컬럼 구현은 안됩니다.
프로그래밍으로 동적 쿼리를 구성해야 합니다.
-- 1. 동적쿼리 SELECT item , date -- 여기부터 -- , SUM(CASE store WHEN 'A 슈퍼' THEN amount ELSE 0 END) "A 슈퍼" , SUM(CASE store WHEN 'O 백화점' THEN amount ELSE 0 END) "O 백화점" , SUM(CASE store WHEN 'J 백화점' THEN amount ELSE 0 END) "J 백화점" -- 여기까지 -- FROM t WHERE date BETWEEN '20170901' AND '20170930' AND item = '사과' ; -- 2. 동적쿼리를 만들기 위한 선행 쿼리 SELECT DISTINCT store FROM t WHERE date BETWEEN '20170901' AND '20170930' AND item = '사과' ;