안녕하세요 ^^
현재 개발을 하는 중인대요..
너무 안풀려서 여기에 올립니다.
그러니깐 조건이
상품의 등급이 있습니다. A와 B가 있구요.
1.2월달에 A등급 상품을 산 고객이 3월에도 A등급 상품을 살 경우 동일 제품을 산 고객으로 분류 (2월에 B를 3월에 B를 사도 같음)
2.2월달에 A등급 상품을 산 고객이 3월에 B등급 상품을 살 경우 한 분류
3.2월달에 B등급 상품을 산 고객이 3월에 A등급 상품을 살 경우 한 분류
이렇게 3가지 분류입니다.
이렇게 해서 COUNT 해야 하는겁니다.
여기서 단, A,B상품을 한달에 2번 이상 구매 할 경우 A가 우선순위로 들어가서 A상품을 산 고객으로 분류합니다.
이거 정말 고민 하고 주말에도 하고 있는대...안돼서요... 여기에 올립니다 .
Comment 6
-
항해자™
2013.03.02 16:08
-
항해자™
2013.03.02 17:28
1번에 대해서 2가지 정도 방법이 생각이 나네요..
1. 딱 2달만 계산한다면 아주 간단한 쿼리로도 할수 있습니다.
2. 2달만 아니라 여러 달을 체크해야 한다면 pivot을 이용할 수 있겠습니다.
일단 아래는 샘플 데이터 입니다.
CREATE TABLE dbo.TBL_ORDER
(ORD_MON INT
,CUST_NM CHAR(2)
,ITEM_NM CHAR(1)
)INSERT INTO dbo.TBL_ORDER
VALUES
(201302,'가','A')
,(201303,'가','A')
,(201302,'가','B')
,(201302,'나','A')
,(201302,'나','B')
,(201303,'나','B')
,(201302,'다','B')
,(201303,'다','A')1. 딱 2달만 계산하는 경우 입니다.
SELECT *
FROM (
SELECT
CUST_NM
,ITEM_NM
,MIN(ORD_MON) AS MIN_ORD
,MAX(ORD_MON) AS MAX_ORD
FROM dbo.TBL_ORDER
GROUP BY
CUST_NM
,ITEM_NM
) AS A
WHERE MIN_ORD < MAX_ORD2. 2달만 아니라 여러 달을 체크해야 하는 경우 입니다.
(응용해서 쓰세요.. 아마 동적 쿼리로 변환해서 써야 하겠죠,,)
SELECT *
FROM (
SELECT CUST_NM
, ITEM_NM
, [201302]
, [201303]
FROM (
SELECT CUST_NM
, ITEM_NM
, ORD_MON
FROM dbo.TBL_ORDER
) AS A
PIVOT (
MAX(ORD_MON)
FOR ORD_MON IN ([201302],[201303])
) AS PVT
) AS A
WHERE [201302] IS NOT NULL
AND [201303] IS NOT NULL -
군고구마
2013.03.03 19:48
안녕하세요 ^^
답변 대단히 감사합니다.
으흠 그런대 이경우는 날짜를 동적으로 변수값으로 받을수 없지 않을까요?
그리고 기준이 날짜로 하는대... 기준은 날짜가 아니라 상품의 등급이 되어야 하는대요 ㅜ ㅜ....
으흠 제가 응용을 못하는 것일까요../
-
항해자™
2013.03.04 10:40
제가 이해력이 조금 떨어져서 그런데요,,,
위의 쿼리를 실행해 보셨나요??
지금 원하시는 형태의 결과를 그려주시면 이해력에 도움이 될것 같네요^^;; -
군고구마
2013.03.04 11:28
음 그러니깐
날짜
A등급 상품 구매 고객
B등급 상품 구매 고객
같은 등급 상품 구매 고객
2013-02
30
54
20
2013-03
53
10
30
2013-04
35
5
20
이런식으로 나오면 됩니다. 어차피 이거 다 더해서 테이블에 넣고 그 테이블 셀렉트 하면 되는거라서요.
구지 구한다음에 바로 보여줄 필요는 없습니다.
-
항해자™
2013.03.04 19:52
위와 같은 형삭은 A고객의 재구매 상황은 볼수 없지 않나요??
요구사항은 고객의 재구매 형태를 알고 싶어 하는 것 같은데요?? 아닌가요?
디비 버전이 2008이면 어렵지 않게 구할 수 있을 듯 합니다,,
제 생각에는 피봇을 이용해서 데이터를 구한 다음에 원하는 구간에 모두 값이 있는지만 확인하면 될것 같네요,,,
샘플 쿼리는 나중에,,,