从 'over partition by' 中删除重复项
Removing duplicates from 'over partition by'
我使用 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 行单独的数字
是这样的吗?
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;
我使用 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 行单独的数字
是这样的吗?
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;