PL / SQL检查select语句中条件计数中是否存在记录

时间:2017-08-17 13:13:48

标签: select plsql conditional counter

我正在尝试浏览表格并检索缺勤频率指标。我已经有了一个查询,可以按月计算缺席次数。问题是我需要将当前记录与其他记录进行比较(在同一个表格中'测试')以检查有助于我进行频率计算的条件。 我考虑新频率的规则是:当两个病期不连续且两者之间有4天的差距时。

因此,我尝试使用条件计数()进行编码,如下所示:

WITH test (id, start_abs, end_abs, tmp) AS
     (SELECT id, start_abs, end_abs, 0 AS tmp 
      FROM emp_absences
      UNION ALL
      SELECT id, start_abs + 1, end_abs, tmp + 1 
      FROM test 
      WHERE end_abs - start_abs > 0)
      SELECT id, TO_CHAR(start_abs, 'yyyy-mm') AS abs_month, 
             COUNT(DISTINCT start_abs) AS nbr_abs_month,
             COUNT(CASE WHEN NOT EXISTS (SELECT * 
                                         FROM test b
                                         WHERE a.id = b.id AND a.start_abs - 4 = b.start_abs)
                        THEN debut_horaire ELSE NULL
                   END) AS frequency
      FROM test a
      GROUP BY 1, 2))

我想知道是否有可能通过这种方式这样做? 非常感谢。

1 个答案:

答案 0 :(得分:0)

为我工作

select Au.Username
      ,Au.User_Id
      ,count(case
               when exists (select 1 from All_Users Au_Aux where Au.User_Id = Au_Aux.User_Id) then
                Au.Created
               else
                null
             end) as count
  from All_Users Au
 group by Au.Username
         ,Au.User_Id

我希望能帮助你。 感谢