如何在Count Function中使用where子句?

时间:2019-07-24 11:33:00

标签: sql sql-server plsql count

我有一个查询,其中我要区分新老员工,我要计算那里有多少新老员工。我如何隔离,我不想按分组使用分组。 这是我的查询

((SELECT mock.EID,
         mock.ECode,
         mock.BaseCode,
         mock.STATUS,
         mock.EmpName,
         mock.Desig,
         mock.CMP_ID,
         CASE WHEN podt.empid IS NULL THEN CAST(0 AS bit)ELSE CAST(1 AS bit)END AS [select],
         CONVERT(varchar, mock.JoiningDate, 106) AS JoiningDate,
         CASE
              WHEN DATEDIFF(DAY, mock.JoiningDate, '1/31/' + CAST(DATEPART(YEAR, GETDATE()) AS varchar)) > 60 THEN 'Old'
              ELSE 'New'
         END AS StatusEmployee
  FROM (SELECT E.EID,
               E.ECode,
               E.BaseCode,
               CASE WHEN E.EActive = 0 THEN 'ACTIVE' ELSE 'IN ACTIVE' END AS STATUS,
               E.EmpName,
               D.DesigDesc AS Desig,
               E.CMP_ID,
               CAST(E.JoiningDate AS datetime) AS JoiningDate
        FROM PostingDetail pd,
             Employee_Profile E,
             DESIGNATION D
        WHERE pd.EmpId = E.EID
          AND E.Desig = D.DesigCode
          AND pd.SubLoc IN (6700, 20400, 21300, 21900)
          AND pd.EndDate IS NULL
          AND CMP_ID IN ('SZSPL')
          AND CAST(E.JoiningDate AS datetime) BETWEEN CAST(E.JoiningDate AS datetime) AND '1/31/' + CAST(DATEPART(YEAR, GETDATE()) AS varchar)) mock
       LEFT OUTER JOIN PostingDetail_training podt ON mock.EID = podt.empid));

1 个答案:

答案 0 :(得分:-3)

select  SUM (CASE WHEN tbl.StatusEmployee= 'New' then 1 else 0 end ) NewEmployee,SUM (CASE WHEN tbl.StatusEmployee= 'Old' then 1 else 0 end ) OldEmployee  
 from (  
(select mock.EID, mock.ECode, mock.BaseCode, mock.STATUS, mock.EmpName, mock.Desig, mock.CMP_ID, case when podt.empid is null then cast(0 as bit) else cast(1 as bit) End [select] ,convert(varchar,mock.JoiningDate,106)JoiningDate,  
case when DATEDIFF(day,mock.JoiningDate,'1/31/'+cast(DATEPART(year,getdate())as varchar))  > 60 then 'Old'  
else 'New' end as StatusEmployee  
 from (  
SELECT E.EID, E.ECode, E.BaseCode, CASE WHEN E.EActive = 0 THEN 'ACTIVE' ELSE 'IN ACTIVE' END AS STATUS, E.EmpName, D.DesigDesc As Desig, E.CMP_ID ,CAST(E.JoiningDate AS datetime) JoiningDate  
FROM PostingDetail pd, Employee_Profile E, DESIGNATION D   
Where pd.EmpId = E.EID AND E.Desig = D.DesigCode AND pd.SubLoc in(6700, 20400, 21300, 21900) AND pd.EndDate is null AND CMP_ID IN('SZSPL') and cast(E.JoiningDate as datetime) between cast(E.JoiningDate as datetime) and '1/31/'+cast(DATEPART(year,getdate())as varchar)) mock left outer join PostingDetail_training podt on mock.EID=podt.empid    

)) tbl