代码之家  ›  专栏  ›  技术社区  ›  Ryan Gadsdon

正在从“over partition by”中删除重复项

  •  0
  • Ryan Gadsdon  · 技术社区  · 7 年前

    我的结果的一个简短示例:

        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
    

    没有重复的行。

    有人对此有什么建议吗?为了基本上删除重复的分区行,所以我只需要将当月的正确数据分组

    更新:

    1 回复  |  直到 7 年前
        1
  •  1
  •   sepupic    7 年前

    像这样的?

    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;