2013-07-16 26 views
0

我需要計算每個員工再次僱用他們的總休假時間。這是很容易得到一個員工我如何計算假期積累基礎上僱用

SELECT  PRCo, Employee, SUM(dbo.PRTH.Hours) AS TotalHrs, 
         dbo.PREH.HireDate 
FROM  A  
WHERE  A.ActiveYN = 'Y') AND (A.EarnCode IN (5249, 5257, 5258, 5279, 5286, 5296, 5309, 7711, 7733)) AND (A. PostDate <= CONVERT(DATETIME, '2013-07-15 00:00:00', 102)) AND (A.PostDate >= CONVERT(DATETIME, '2012-08-21 00:00:00', 102)) 
GROUP BY A.PRCo, A.Employee, A.PREH.HireDate 
HAVING  (A.Employee = 1) 

我也很難讓所有的員工,因爲發佈日期範圍是從對僱傭日期彼此不同的基地。 。我在想使用遊標或循環,但我確定它的工作原理或工作原理。任何建議都會預示。我使用t-sql。謝謝

+0

您如何找到給定員工的發佈日期? –

+0

如果post_date保存在任何表中,那麼你可以修改sql查詢。請同時分享保存小時數,入職時間以及保存發佈日期的表格結構。 –

+0

你可以修復你的代碼更連貫嗎? – Kermit

回答

0

您可以使用Employee_Id和Post_Date值創建一個臨時表。在主查詢中,將該臨時表與員工ID結合起來,並獲取發佈日期值。下面是一個示例查詢:

SELECT
濮耐,僱員,SUM(dbo.PRTH.Hours)AS TotalHrs,dbo.PREH.HireDate

FROM
甲 JOIN #TEMP乙 ON A.Employee = B.Employee_Id WHERE
A.ActiveYN = 'Y')AND (A.EarnCode IN(5249,5257,5258,5279,5286,5296,5309,7711,7733)) AND(A 。PostDate < = CONVERT(DATETIME,B.Post_Date,102)) AND(A.PostDate> = CONVERT(DATETIME,B.Post_Date,102)) GROUP BY A.PRCo,A.Employee,A.PREH.HireDate HAVING
(A.Employee = 1)

+0

謝謝。我仍然有點困惑。對於員工1,我需要從2012年8月21日至今天選擇postdate。但對於empoyee 2我需要從2012年5月7日 - 今天選擇postdate。然後總計這些範圍內的總小時數。 –

+0

創建一個名爲Employee_ID和postdate的兩列的臨時表。插入這些列的值,例如Employee_1和8/21/2012,Employee_2和2012年5月7日等。然後按上述查詢中所述加入此臨時表。 – Sonam

0

我希望這個代碼將有助於:

CREATE TABLE #TEMP(EMPLOYEE_ID INT,DATETIME POST_DATE,HOURS INT) INSERT INTO #TEMP VALUES(1, '8月21日/ 2012',DATEDIFF(HH,'8/(2012年5月7日,2012年8月21日,GETDATE())) 選擇
PRCo,2012/2012',GETDATE())) INSERT INTO #TEMP VALUES員工,SUM(dbo.PRTH.Hours)AS T otalHrs,dbo.PREH.HireDate

FROM
甲 JOIN #TEMP乙 ON A.Employee = B.Employee_Id WHERE
A.ActiveYN = 'Y')AND (A.EarnCode IN (5249,5257,5258,5279,5286,5296,5309,7711,7733)) 和(A)。 (A.PostDate> = CONVERT(DATETIME,B.Post_Date,102)) GROUP BY A.PRCo,A.Employee,A.PREH.HireDate(Post date DATETIME HAVING
(A.Employee = 1)