代码之家  ›  专栏  ›  技术社区  ›  Naveen Bodapati

分组数据和维护计算字段

  •  2
  • Naveen Bodapati  · 技术社区  · 6 年前

    我有几个字段,如部门、工作地点、员工和工作日期 需要根据给定的日期参数获取输出

    Department  WorkLocation  EmployeeID   WorkDate
    ----------  ------------  ----------   --------
    D1           L2            121          05/01/2018
    D1           L1            141          05/01/2018
    D2           L1            151          05/02/2018
    and so on
    

    我曾尝试使用临时表存储数据并从中获取数据,但不起作用

    部门、给定日期工作的员工人数、给定日期后最后7天工作的员工人数、从月初到给定日期工作的员工人数 i、 e类

    Department   WorkLocation     Count_On_Date   Count_Last7Days   Count_MonthToDate
    ----------    -----------     ------------    ---------------   -----------------
    D1           L1              xxx                  xxx             xxx
    D2           L1              xxx                  xxx             xxx
    D1           L2              xxx                  xxx             xxx
    D2           L2              xxx                  xxx             xxx  
    

    请帮忙

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Yogesh Sharma    6 年前

    使用 GROUP BY 子句并执行 有条件的 与聚合 case 表示

    select Department, WorkLocation,
           sum(case when WorkDate = @givendate then 1 else 0 end) as Count_On_Date,
           sum(case when WorkDate >= dateadd(day, -8, @givendate) and 
                         WorkDate < @givendate
                    then 1 else 0 end) as Count_Last7Days,
           sum(case when month(WorkDate) = month(@givendate) 
                    then 1 else 0 end) as Count_MonthToDate
    from table t
    group by Department, WorkLocation;
    
        2
  •  1
  •   Siavash Rostami Raju K    6 年前

    这是我测试过的,工作正常。您需要使用具有不同条件的内联计数。生产我们的每一条生产线 case 具有单向条件的子句,用于取消不需要的值。

    select 
        wd.Department, 
        wd.WorkLocation,
        COUNT(1) as Count_On_Date,
        COUNT(case when DATEDIFF(DAY, wd.WorkDate, GETDATE()) < 7 then 1 end) as Count_Last7Days,
        COUNT(case when DATEDIFF(DAY, wd.WorkDate, GETDATE()) < 30 then 1 end) as Count_MonthToDate
    from WorkData as wd
    group by wd.Department, wd.WorkLocation