2014-10-08 166 views
1

我无法确定此查询,它应该很容易。但我不知所措。 如何使用由日期范围绑定的汇总SUM进行查询?选择聚合和日期范围

对于这个表:

ID EmployeeID PayAmount PayDate 
1 48   289.0000  2003-12-22 00:00:00.000 
2 251  458.0000  2003-12-30 00:00:00.000 
3 48   248.0000  2003-12-30 00:00:00.000 
4 167  255.5000  2003-12-30 00:00:00.000 
5 48   100.00   2004-01-31 00:00:00.000 
6 251  100.00   2004-01-31 00:00:00.000 
7 251  300.00   2004-02-14 00:00:00:000 

我想运行一个查询,看看有多少每个员工在某一年赚来的。因此,对于2003年,其结果将是这样的:

EmployeeID TotalPaid 
48   537.00 
167   255.50 
251   458.00 

2004年的结果将是:

EmployeeID TotalPaid 
48   100.00 
251   400.00 
+1

哪个dbms?是它的SQL服务器或Oracle或MySQL – radar 2014-10-08 22:11:42

+0

什么阻止你自己写这样的问题?你卡在哪里? – 2014-10-08 22:13:42

+0

微软SQl服务器 – TZERO 2014-10-08 22:16:18

回答

1

在Microsoft SQL Server,你可以这样做。 根据年份为每个员工ID分组数据 可以使用HAVING子句WITH YEAR函数筛选特定年份的数据。 此查询提供2004年的数据

SELECT EmployeeID, 
     SUM(PayAmount) as TotalPaid, 
     DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0) as Year 
FROM Table1 
GROUP BY EmployeeID, DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0) 
HAVING YEAR(DATEADD(YEAR, DATEDIFF(YEAR,0, Paydate), 0)) =2004 
+0

也许演示如何在where子句中使用日期函数来筛选特定年份,因为这似乎是OP挂起的一部分。 – TML 2014-10-08 22:22:44

+0

@TML,你是对的,增加了HAVING子句来演示年份。 – radar 2014-10-08 22:26:58

+0

是的,先生。这样可行。我刚添加ORDER BY EmployeeID,这正是我需要的。谢谢。 – TZERO 2014-10-08 22:28:01