2017-09-14 79 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

好的,謝謝你! –