2017-09-12 27 views
0

我基本上有一个case语句,显示每个人的利润总额和一个月迄今为止的总和。我的想法是我想显示该人的日常数字以及他们整个月的总数。SQL通过分区

我的问题是,当我将结果限制在昨天(应该是每日数字)时,这会影响月份值的计算(只计算当天的总和而不是整个月份)。

这是因为总的月份值都超出了查询的范围。无论如何都要正确计算每个人的整个月份值,而不必在影响结果的地方设置限制。

例如 结果:

08/09/17: 25  
09/09/17: 25 
10/09/17: 25  
11/09/17: 25 <<<< but only display one day and month total 
Overall Month total: 100 

可这也包括空值吗?我想即时通讯几乎查看动态存储的月份到日期值,这不受where子句的影响。

SELECT SUM(Figure) AS 'Daily Figure', 

CASE WHEN 
    MONTH([DATE]) = MONTH(getdate()) AND 
     YEAR([DATE]) = YEAR(getdate()) 
THEN 
SUM(Figure) 
OVER (PARTITION BY [Name], 
MONTH([DATE])) 
ELSE 0 END 
as [Month To Date Total] 

WHERE 
    dateadd(day,datediff(day,1,GETDATE()),0) 

回答

1

如果你想要月最新和电流量,然后使用条件汇总:

SELECT NAME, 
     SUM(CASE WHEN DAY(DATE) = DAY(GETDATE()) - 1 THEN Figure ELSE 0 END) AS DailyFigure, 
     SUM(Figure) as MonthToDate  
WHERE MONTH([DATE]) = MONTH(getdate()) AND 
     YEAR([DATE]) = YEAR(getdate()) 
GROUP BY NAME; 

这适用于所有但当月的第一天。

+0

好吧,我会看看。我设法让它显示我想要的结果,但我的主要问题是,只要我限制到特定的日子结果,它会混淆整个月的总数。我的主要问题确实是如何显示结果和计算超出了查询范围的限制?如果这是有道理的 –

+0

这个结果只是给了我与日常数字 –

+0

@RyanGadsdon完全相同的月份数字。 。 。这只有在特定月份的表中有一天数据的情况下才有可能。你确定'WHERE'只在年和月吗? –