【发布时间】:2017-11-02 11:18:05
【问题描述】:
我有这些当前结果
PersonName Team Daily Amount Date
Alex 4 10 2017-01-11
Alex 4 10 2017-01-11
Alex 4 10 2017-01-11
Ben 1 10 2017-02-11
Ben 1 10 2017-02-11
Ben 1 10 2017-01-11
Fred 3 10 2017-01-11
Fred 3 10 2017-01-11
Fred 3 10 2017-01-11
Sam 2 10 2017-02-11
Sam 2 10 2017-01-11
Sam 2 10 2017-01-11
Tom 2 10 2017-01-11
Tom 2 10 2017-02-11
Tom 2 10 2017-01-11
现在,我希望在两个单独的列中创建迄今为止的每日和每月数字。
我正在寻找这样的结果:
PersonName Team Daily Amount Date Monthly Figure
Alex 4 30 2017-01-11 30
Ben 1 10 2017-01-11 30
Fred 3 10 2017-01-11 30
Sam 2 20 2017-01-11 30
Tom 2 20 2017-01-11 30
到目前为止,我有一个这样的查询,但我不确定这是最好的方法。它给了我与我预期不同的分组总和结果。
SELECT P.PersonName, min(P.Team) AS [Team],
SUM(F.Amount) AS [Daily Amount], min(F.Date) AS [Date], MTD.[Month To Date]
FROM Person P
JOIN Figure F on P.PersonID =F.PersonFK
WHERE DATEDIFF( d, F.Date, GETDATE() ) = 1
GROUP BY P.PersonName
JOIN
(SELECT
P.PersonName, min(P.Team) AS [Team],
SUM(F.Amount) AS [Month To Date]
, min(F.Date) AS [Date]
FROM Person P
JOIN Figure F on P.PersonID =F.PersonFK
F.Date BETWEEN CAST(MONTH(GETDATE())
AS VARCHAR) + '/' + '01/' + + CAST(YEAR(GETDATE()) AS VARCHAR)
AND GETDATE()
GROUP BY P.PersonName ) MTD
ON MTD.PersonName = P.PersonName
我已经尝试过加入子查询以及使用联合,但我无法完全得到我想要的结果。谁能给我进一步的建议?谢谢
SQL FIDDLE - http://sqlfiddle.com/#!6/23bbb/12
【问题讨论】:
-
“2017-02-11”发生了什么?
-
@GordonLinoff 我想将每日限制为 2017 年 1 月 11 日,但显示整个月的总数。我可以删除日期字段 - 它并不重要。它只是为了展示我正在努力实现的目标
标签: sql sql-server join group-by subquery