2017-09-25 53 views
0

使用over分區by子句計算人物月數。從'over partition'刪除重複項'

我的結果的一個簡單的例子:

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' 

遇到的主要問題IM是我只想顯示今天的每日數字,但與全月值。我組這個數字對於每個人,並限制到今天,但要能組由人,我需要一個月的總和日期數字,這顯然給我留下了

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

張貼您的查詢或原始數據將有所幫助 - 因爲從您當前的所需結果我認爲你可以實現使用Group By而不是Window Function –

+0

問題是,此刻我只需要每天的數字,但他們整個月的總數爲好。所以group by by does not work to calculate month to date figure,because it only sum up it for the day - 窗口函數似乎只有選項,但它會爲每個匹配該人員名稱的行創建重複總和 –

回答

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;