안녕하세요,
상품을 가지고 있는지 없는지 여부를 조회하는 쿼리를 짜고 싶은데
잘 되지 않아서 도움 요청합니다. ㅠㅠ
예를 들면,
날짜 이름 상품a(여부) 상품b(여부) 상품c(여부)
2021/10/01 a ㅇ x o
2021/10/02 b ㅇ o o
2021/10/03 c ㅇ x x
...
2021/10/21 d x x o
이런 식으로 날짜별로 각 사람 별로 상품 a, b, c를 가지고 있는지 여부를 표시하고 싶습니다.
아래가 실제로 db에 저장되어있는 데이터입니다.
NO 이름 PRODUCT REG_DATE
1 a 상품A 2021/10/01
2 a 상품B 2021/10/01
3 a 상품C 2021/10/01
4 b 상품A 2021/10/03
5 b 상품B 2021/10/03
6 c 상품C 2021/10/03
7 d 상품A 2021/10/03
8 e 상품C 2021/10/04
9 f 상품C 2021/10/05
10 g 상품A 2021/10/05
어떻게 해야할까요? 쿼리 너무 어렵네요 ..
sum case 사용하시면 될듯합니다. 쓰고보니 큐브리드였군요~
select reg_date,
이름,
case when sum(case when product='상품A' then 1 else 0 end) > 0 then 'O' else 'X' end product_a,
case when sum(case when product='상품B' then 1 else 0 end) > 0 then 'O' else 'X' end product_b,
case when sum(case when product='상품C' then 1 else 0 end) > 0 then 'O' else 'X' end product_c
from t
group by reg_date, 이름
order by reg_date
WITH t AS ( SELECT 1 no, 'a' nm, '상품A' product, '2021/10/01' reg_date FROM dual UNION ALL SELECT 2, 'a', '상품B', '2021/10/01' FROM dual UNION ALL SELECT 3, 'a', '상품C', '2021/10/01' FROM dual UNION ALL SELECT 4, 'b', '상품A', '2021/10/03' FROM dual UNION ALL SELECT 5, 'b', '상품B', '2021/10/03' FROM dual UNION ALL SELECT 6, 'c', '상품C', '2021/10/03' FROM dual UNION ALL SELECT 7, 'd', '상품A', '2021/10/03' FROM dual UNION ALL SELECT 8, 'e', '상품C', '2021/10/04' FROM dual UNION ALL SELECT 9, 'f', '상품C', '2021/10/05' FROM dual UNION ALL SELECT 10, 'g', '상품A', '2021/10/05' FROM dual ) -- Oracle 에서 test -- SELECT reg_date , nm , MIN(CASE product WHEN '상품A' THEN 'o' ELSE 'x' END) 상품A , MIN(CASE product WHEN '상품B' THEN 'o' ELSE 'x' END) 상품B , MIN(CASE product WHEN '상품C' THEN 'o' ELSE 'x' END) 상품C FROM t GROUP BY reg_date, nm ORDER BY reg_date, nm ;