Удаление дубликатов из "перегородки"
Я использую над разделом по пунктам для расчета ежемесячных чисел людей.
Краткий пример моих результатов:
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
без дублированных строк.
Кто-нибудь получил совет по этому поводу? Чтобы в основном удалить дублированные разделенные строки, чтобы я просто сгруппировал правильную цифру за месяц
ОБНОВИТЬ:
Каждый ряд - это просто индивидуальная фигура для каждого человека. Ничего не сгруппировано, поэтому каждый человек может иметь по крайней мере 20 отдельных строк для цифр на каждый день
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;