SQL Server 2012를 사용하여 판매 대리점의 롤링 판매 정보를 추출합니다. 이 에이전트는 롤링 기간이 6 일 이내 인 15 건의 매출을 달성하면 보너스로 지급됩니다. 타겟을 만들면 롤링 횟수가 재설정됩니다. 일요일은 무시해야합니다.리셋으로 누적 합계를 사용하는 판매 목표
SELECT 1 AgentID,'2016-10-31' Date,1 Sales
INTO #Sales
UNION SELECT 1,'2016-11-01',2
UNION SELECT 1,'2016-11-02',1
UNION SELECT 1,'2016-11-03',5
UNION SELECT 1,'2016-11-04',3
UNION SELECT 1,'2016-11-05',2
UNION SELECT 1,'2016-11-07',6
UNION SELECT 1,'2016-11-08',5
UNION SELECT 1,'2016-11-09',4
UNION SELECT 1,'2016-11-10',6
UNION SELECT 1,'2016-11-11',1
UNION SELECT 1,'2016-11-12',3
UNION SELECT 1,'2016-11-14',2
UNION SELECT 1,'2016-11-15',2
UNION SELECT 1,'2016-11-16',4
UNION SELECT 1,'2016-11-17',2
UNION SELECT 1,'2016-11-18',2
내가 대상이 타격을받을 것으로 예상 날짜는 다음과 같습니다 : 나는 몇 가지 방법 그러나 나는 시도했다
2016-11-07 (period 2016-11-01 -> 2016-11-07)
2016-11-10 (period 2016-11-08 -> 2016-11-10)
2016-11-18 (period 2016-11-12 -> 2016-11-18)
AgentID Date Sales Qualify
-------------------------------
1 2016-10-31 1 0
1 2016-11-01 2 0
1 2016-11-02 1 0
1 2016-11-03 5 0
1 2016-11-04 3 0
1 2016-11-05 2 0
1 2016-11-07 6 1
1 2016-11-08 5 0
1 2016-11-09 4 0
1 2016-11-10 6 1
1 2016-11-11 1 0
1 2016-11-12 3 0
1 2016-11-14 2 0
1 2016-11-15 2 0
1 2016-11-16 4 0
1 2016-11-17 2 0
1 2016-11-18 2 1
다음 AgentID, 날짜 및 판매 데이터를 제공
그래서 총계를 재설정하는 방법을 찾을 수 없습니다.
나는 창 함수가 갈 길이라고 생각한다.
Window Functions - Running Total with reset
같은 게시물을 보면 나는 이것이 내가 필요 비슷하지만 아주 제대로 동작하지 않습니다 수 있다고 생각합니다.
업데이트 : 내가 시도한 첫 번째 일은 6 일짜리 롤링 윈도우를 만드는 것이지만 세트 기반 방식으로는 작동하지 않습니다. 커서를 사용하여이 행을 단계별로 실행할 수는 있지만 실제로 아이디어가 마음에 들지 않습니다.
SELECT DATEADD(DAY,-6,a.Date) StartDate,Date EndDate,a.AgentID,a.Sales,
(SELECT SUM(b.Sales)
FROM cteSales b
WHERE b.Date <= a.Date
AND b.Date >= DATEADD(DAY,-6,a.Date)) TotalSales
FROM cteSales a
나는 다음 위의 URL에서 언급 된 스크립트를 사용하려하지만 난 정말 무엇을하고 있는지 이해하지 않습니다. 저는 솔루션을 가로막을 수있게 바라고 있습니다. 단지 작동하지 않습니다.
WITH c1 as
(
select *,
sum(sales) over(order by IDDate rows unbounded preceding) as rt
from cteSales
)
SELECT date, sales, rt,
SalesTarget_rt - lag(SalesTarget_rt, 1, 0) over(order by date) as SalesTarget,
rt * SalesTarget_rt as new_rt
from c1
cross apply(values(case when rt >= 15 then 1 else 0 end)) as a1(SalesTarget_rt);
당신은 당신이 지금까지 시도 스크립트가 있습니까? – iamdave
또한 같은 날의 15 일 이후의 판매가 다음 목표를 향해 계산됩니까? 그래서 그들이 1 일에 14 개를 판매하고 2 일에 3을 판매한다면 다음 목표를 향한 계산은 3 일에 2 또는 0으로 시작합니까? – iamdave
아 그리고 또한 (!) 각 요원에 대해 하루에 최대 한 개의 레코드 만있을 것입니까? – iamdave