简体   繁体   中英

How to use where clause in Count Function?

i have a query in which i segregate old and new Employee i want to count how many New and old employees are there. how can i segregate and i dont want to use group by cluase. here is my Query

((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));
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 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM