2017-09-25 9 views
0

나는 over partition by 절을 사용하여 사람들의 월간 수치를 계산합니다.'over partition by'에서 중복 제거

내 결과의 짧은 예 :

Date   Person  Team Daily Figure Month To Date 
    24/09/17  James   2   50   200 
    24/09/17  James   2   50   200 
    25/09/17  James   2   50   200 
    25/09/17  James   2   50   200 

내가 사람을 통해 매일 그림과 예를 들어 월을 분할하여 매월 수치를 계산하고

CASE 
    WHEN 
    MONTH([DATE]) = MONTH(getdate()) 
    THEN SUM(Figure) 
    OVER (PARTITION BY [Name], 
    MONTH(DATE])) 
    ELSE 0 
    END AS 'Month To Date' 

중요한 문제는 현재 일일 수치를 전체 월 값으로 표시하고 싶다는 것입니다. I 그룹은 내가 분명히

Date   Person  Team Daily Figure Month To Date 
    25/09/17  James   2   100   800 

매일 그림으로 나를 잎 날짜 그림을 달 합계해야 할 사람이 그룹에 수 있기 그러나 오늘날 각 개인과 한계에 대한 그림은 정확하지만 분명히 합산 나에게 틀린 그림을주는 복제 된 행.

오늘의 이상적인 결과는 다음과 같습니다 중복 된 행

 Date   Person  Team Daily Figure Month To Date 
    25/09/17   James   2   100    200 

합니다.

누구에게이 문제에 대해 조언이 있습니까?

각 행은 단지 각 사람에 대한 개별 인물이다 : 난 그냥 날짜 그림에 대한 올바른 달

UPDATE를 그룹화 얻을 수 있도록 기본적으로 중복 분할 된 행을 제거합니다. 각 인물이 그룹화되어있어 매일 각 인물에 최소한 20 행의 별도 행이있을 수 있습니다.

+0

나는 당신이하고 싶은 것을 따라갈 수 없다. 어떤 데이터로 시작 했습니까? 각 행의 정의는 무엇입니까? –

+1

귀하의 쿼리 또는 원시 데이터를 게시하는 것이 도움이 될 것입니다 - 당신이 현재의 결과에서 나는 당신이 창 기능 대신 그룹을 사용하여 달성 할 수 있다고 생각하기 때문에 –

+0

문제는 그 순간에 나는 단지 일일 수치뿐만 아니라 그들의 전체 달 합계가 필요하다는 것입니다. 잘. 그래서 그것이 그 날에 대해 단지 합계를 계산하기 때문에 나던 그만큼 그룹을 계산합니다 - 창 함수는 유일한 옵션 인 것처럼 보이지만 그 사람 이름과 일치하는 모든 행에 대해 중복 된 합계를 만듭니다. –

답변

1

다음과 같은 것이 있습니까?

declare @t table (Date date, Person varchar(100), Team int, [Daily Figure] int); 
insert into @t values 
    ('20170924',  'James',   2,   50), 
    ('20170924',  'James',   2,   50), 
    ('20170925',  'James',   2,   50), 
    ('20170925',  'James',   2,   50), 
    ('20170801',  'James',   2,   80), 
    ('20170802',  'James',   2,   80); 


select Date, Person, Team, sum([Daily Figure]) as [Daily Figure], 
     sum(sum([Daily Figure])) over(partition by Person, Team, month(date)) as [month to date figure] 
from @t 
group by Date, Person, Team;