0

我使用 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

没有重复的行。

有人对此有任何建议吗?基本上删除重复的分区行,所以我只得到正确的月份日期数字分组

更新:

每行只是每个人的个人数字。没有分组,所以每个人每天至少可以有 20 行单独的数字

4

1 回答 1

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;
于 2017-09-25T13:38:09.800 回答