2017-09-25 59 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' 

主な問題は、今日の日常的な数字を表示するだけですが、月全体の値を表示することです。私のグループは、私は明らかに

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を使うことができると思うからです。 –

+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;