by 힘내라김대리 [SQLServer] mssql query sql server [2021.05.22 15:28:30]
쿼리 질문이 있습니다.
프로젝트 중인데,,, 어떻게 개발해야할지 제 머리로는...
우선 설명을 드리자면, 신발 사이즈가 270 이라고 한다면,
사이즈에서 +5 / -5를 각각 더한 사이즈를 구매하면(265 사이즈/275 사이즈) 270과 같은 사이즈로 보고 있습니다.
주문에 대한 데이터가 아래와 같이 있다면
<주문이력> - AS-IS
order_no | seq | order_date | member_id | product_no | size |
100000001 | 1 | 2021-05-01 | member1 | 신발1 | 270 |
100000001 | 2 | 2021-05-01 | member1 | 신발2 | 265 |
100000002 | 1 | 2021-05-05 | member1 | 신발2 | 280 |
100000003 | 1 | 2021-05-10 | member1 | 신발3 | 270 |
<상품>
seq | product_no | size |
1 | 신발1 | 270 |
2 | 신발2 | 265 |
3 | 신발2 | 280 |
4 | 신발3 | 170 |
<주문이력> - To-Be
order_no | seq | order_date | member_id | product_no | size | same_size_rate |
100000001 | 1 | 2021-05-01 | member1 | 신발1 | 270 | 75% |
100000001 | 2 | 2021-05-01 | member1 | 신발2 | 265 | 75% |
100000002 | 1 | 2021-05-05 | member1 | 신발2 | 280 | 0% |
100000003 | 1 | 2021-05-10 | member1 | 신발3 | 270 | 75% |
이렇게 비율이 나와야 할 것 같은데...
쿼리로 작성하려니...어떻게 해야할지 고민이네요
WITH tmpT ( product_no , [size] ) as ( SELECT '신발1', 270 UNION ALL SELECT '신발2', 265 UNION ALL SELECT '신발2', 280 UNION ALL SELECT '신발3', 270 ) SELECT product_no , [size] , CAST(CASE WHEN [size] BETWEEN 270-5 AND 270+5 THEN SUM( IIF( [size] BETWEEN 270-5 AND 270+5 , 1 , 0 ) ) OVER() *100 / COUNT(1) OVER() ELSE 0 END AS VARCHAR )+'%' same_size_rate FROM tmpT