我有一张表格,其中以日期时间格式提供加入日期。 我必须计算每个财政年度加入的员工人数。即例如来自 1-04-2002至31-03-2003。这应该适用于每年......从2003年到2004年,2004年到2005年......等等。
可以帮忙吗? thanxx。
答案 0 :(得分:0)
您可以使用YEAR(DATEADD(M,-3,JoinDate)
将开始日期映射到财政年度我认为您可以使用CTE计算记录,例如
with EmployeeStartFinYear(FinYear, EmployeeId)
as
(
select year(dateadd(M,-3,JoinDate)), EmployeeId
from Employees
where JoinDate is not null
)
select FinYear, count(EmployeeId)
from EmployeeStartFinYear
group by FinYear
order by FinYear;
答案 1 :(得分:0)
这是我的答案。我认为它看起来很可怕,但我认为它有效。我将解释其背后的逻辑。
所有查询都是从开始日期到该开始日期之间的一年之间获得员工的数量,并将其放入临时表中。然后它再次查看,并获得在开始日期+ 1和开始日期+2之间开始的员工。
对不起,如果这是可怕的,丑陋的,不起作用。
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
DECLARE @Years TINYINT
DECLARE @Counter TINYINT
DECLARE @Diff TINYINT
DECLARE @TempTable TABLE
(
FinancialYear VARCHAR(9)
,Employees TINYINT
)
SET @Count = 0
SET @Diff = 1
SET @Years = DATEDIFF(yyyy, @StartDate, @EndDate)
WHILE @Count < @Years - 1
BEGIN
SELECT
CAST(DATEPART(yyyy, DATEADD(yyyy, @Count, @StartDate) AS VARCHAR(4)) + '-' + CAST(DATEPART(yyyy, DATEADD(yyyy, @Diff, @StartDate)) AS VARCHAR(4) AS FinancialYear
,COUNT(employee_id) AS Employees
INTO @TempTable
FROM
Employees
WHERE
join_date >= @StartDate AND join_date < DATEADD(yyyy, 1, @StartDate)
GROUP BY
CAST(DATEPART(yyyy, DATEADD(yyyy, @Count, @StartDate) AS VARCHAR(4)) + '-' + CAST(DATEPART(yyyy, DATEADD(yyyy, @Diff, @StartDate)) AS VARCHAR(4)
SET @Count = @Count + 1
SET @Diff = @Diff + 1
END
SELECT * FROM @TempTable