테이블 Product
제품명 | 비회원할인율 | 회원할인율 | VIP할인률 |
제품1 | 1.5 | 2.0 | 3.0 |
제품1 | 1.2 | 1.7 | 2.5 |
제품1 | 1.4 | 1.5 | 1.7 |
SELECT A.제품명, A.비회원할인율, B.회원 할인율, C.VIP할인률,
FROM
( SELECT ROW_NUMBER() OVER (PARTITION BY 제품명 ORDER BY MAX(비회원할인율) DESC) AS Row
, MAX(비회원할인율) AS 제품FROM Product where 비회원할인율<>''
GROUP BY 제품명
) AS A ,
( SELECT ROW_NUMBER() OVER (PARTITION BY 제품명 ORDER BY MAX(회원할인율) DESC) AS Row
, MAX(회원할인율) AS 제품FROM Product where 회원할인율<>''
GROUP BY 제품명
)AS B ,
( SELECT ROW_NUMBER() OVER (PARTITION BY 제품명 ORDER BY MAX(VIP할인률) DESC) AS Row
, MAX(VIP할인률) AS 제품FROM Product where VIP할인률<>''
GROUP BY 제품명
)AS C
WHERE A.제품명=B.제품명 and B.제품명=C.제품명 and A.제품명=C.제품명 And A.Row = 1 And B.Row=1 And C.Row=1
보시면 아시겠지만. 제품명에 따른 최고 비회원할인율, 최고 회원할인율, 최고 VIP할인율 각각의 최고의 할인율을 뽑는 쿼리있데요..
비회원할인율, 회원할인율, VIP할인율 모두 하나에 값만 있는게 아니라서요.
제품1에 비회원 할인률이 1.5 만 있는게 아니고 몇개의 할인율 즉 1.5 1.6 1.7.... 이렇게 여러개 값이 들어올경우
테이블 디자인 또는 쿼리를 어떻게 만들어야 할까요?
Comment 4
-
건우아빠
2013.10.18 15:19
-
오리지널
2013.10.18 15:32
먼저 댓글 감사합니다.
제품명
비회원할인율
회원할인율
VIP할인률
제품1
1.5 , 1.7, 1.3
2.0
3.0
제품1
1.2
1.7
2.5
제품1
1.4
1.5
1.7
근데 문제는 비회원할인율 1.5 하나만 입력될수도 있고,
1.5 , 1.7, 1.3... 이렇게 여러값이 있을수 있어서요..
회원할인율 , VIP할인률 도 마찬가지로 여러값이 있을수 있구요.
그래서 테이블을 다시 만들어야 하나 아니면 쿼리로 가능할까 해서요.
-
건우아빠
2013.10.18 15:59
unpivot으로 분리하신 다음
구분자를 분리 하시는 방법을 적용하시고 다시 pivot으로 처리 하시면
http://www.sqler.com/141578 구분자
http://www.sqler.com/579367 unpivot -> pivot을 적절히 응용하시면 될듯 합니다...
테이블 설계를 다시 하실수 있으면 하시는게 좋을듯 합니다. 표 형태의 테이블 보다는 구분에 따른 리스트 형태로 만드시는게 나중에 회원 구분이 추가가 되더라도 적용이 쉬울듯 합니다.
쿼리로 구현 하는것 수정과는 별도로 해보시는것도 좋은 공부가 될듯 하구요...
-
건우아빠
2013.10.18 16:17
1.5 , 1.7, 1.3 들어간다고 해도 규칙성을 부여하는 업무룰을 잡으시고 1.3,1.5,1.7같이 작은 숫자부터 넣어라고 정의되면
오른쪽 3자리를 가져온 값을 가지고 구하셔도 되지 않을까 합니다.. 그럼 단순해지죠...
단순히 쿼리나 테이블 수정이 아닌 업무협의로도 손쉬운 처리가 가능 합니다. ㅎㅎㅎ
기존 데이타는 작은순에서 큰순으로 업데이트 해 놓으시면 되구요. 경우의 수는 많지는 않을듯 하네요....
일일히 바꿔주셔도 큰 무리는 없을듯...
SELECT 제품명, max(비회원할인율 ) , max(회원 할인율 ), max( VIP할인률)
FROM Product
GROUP BY 제품명
그냥 이렇게 하시면 안나오나요...