sql查询计算每个财政年度加入的员工人数,即从2002年4月1日到2003年3月31日

时间:2010-06-18 07:42:53

标签: sql-server

我有一张表格,其中以日期时间格式提供加入日期。 我必须计算每个财政年度加入的员工人数。即例如来自 1-04-2002至31-03-2003。这应该适用于每年......从2003年到2004年,2004年到2005年......等等。

可以帮忙吗? thanxx。

2 个答案:

答案 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. @Years变量是开始日期和结束日期之间的年份差异。
  3. @Counter用于循环存储在@Years中的年数。 @Diff总是比@Counter多一个,因为每次我们完成循环,我们都希望增加日期范围,因此它总是1年,而不是计算1年,2年等加入的员工。
  4. @TempTable存储我们每次查询时获得的信息。
  5. 所有查询都是从开始日期到该开始日期之间的一年之间获得员工的数量,并将其放入临时表中。然后它再次查看,并获得在开始日期+ 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