2017-09-14 71 views
0

我想根据他们每年工作的小时数计算出有多少年的服务年。从雇用日起至每年周年日的时间必须超过2080年。以下是我如何设置SQL来查找每年的小时数,但必须更新日期并每年运行一次。有没有更简单的方法来做到这一点?我可以有一个SQL来总结2080年有人工作多少年?每小时总和

SELECT Sum(hours) 
FROM hours_txn 
WHERE EMPNO = 1824 and Type = 'WRK' 
and TransactionDate between '1989-04-15 00:00:00' and '1990-04-15 00:00:00' 
+1

使用'GROUP BY'来获得每年的小时数。 – Barmar

+0

并且使用'有和(小时)> 2080'来报告它超过2080年的年份。 – Barmar

+0

关闭时机hours_txn在'1990-04-15 00:00:00有一个条目它将包括在两年内计算:从89-90和90-91。也超过或等于2080年以上? (40 * 52 = 2080)似乎就像我得到了短暂的服务年限,除非加班。 – xQbert

回答

0

既然你要删除的硬编码“租用日期”,你将需要实现某种方式来计算。在下面的查询中,我使用的是(手动设置)变量的查询的其余部分可能的样子插图:

begin 
    declare @hiredate datetime 
    set @hiredate = '1989-04-15' 

    select count(*) 
    from hours_txn 
    where EMPNO = 1824 and Type = 'WRK' 
    group by datediff(y, @hiredate, TransactionDate) 
    having sum([hours]) > 2080 
end 
go 

group by给你每一年服务期1个纪录,以及having过滤器“年超过2080小时“,而count(*),以及它的计数:)

+0

感谢您的帮助!运行时没有错误,但没有结果。有任何想法吗? –

+0

我建议将查询“解构”为更简单的查询。例如,您可以'选择*,datediff(y,@hiredate,TransactionDate)...'并通过并且有子句移除该组 - 这可以让您查看单个记录。当你学到更多东西的时候,回到上面的答案中,你可以根据你发现的结果来修改它。 – SlimsGhost

+0

好的,谢谢你! –