날짜별 하나씩 데이터 정렬 0 3 767

by perl [CUBRID] [2021.10.20 17:01:29]


안녕하세요, 

상품을 가지고 있는지 없는지 여부를 조회하는 쿼리를 짜고 싶은데

잘 되지 않아서 도움 요청합니다. ㅠㅠ

 

예를 들면,

날짜               이름         상품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
  

어떻게 해야할까요? 쿼리 너무 어렵네요 ..

 

by pajama [2021.10.20 17:17:58]

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


by 마농 [2021.10.20 17:19:31]
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
;

 


by perl [2021.10.20 21:40:49]

pajama님 마농님 감사합니다 덕분에 해결했습니다~!

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