Удаление дубликатов из "перегородки"

Я использую над разделом по пунктам для расчета ежемесячных чисел людей.

Краткий пример моих результатов:

    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;
Другие вопросы по тегам