Reputation: 37
Please help to my query, I have this query(see below)
select
empnam as Emp_Name,seccod as DEPT,'' as REMARKS
,MAX(CASE WHEN STAT = 'IN' THEN clktim END)[IN]
,MAX(CASE WHEN STAT = 'OUT' THEN clktim END) OUT
from
(select a.clkid,
case when a.devid = '10' then 'IN' else 'OUT' end as STAT
, a.clkdat, a.clktim, b.empid, b.empnam, b.seccod,
row_number() over(partition by clkdat order by dateinsert) as seqnum
from ClkInf a
INNER JOIN EmpInf b ON a.clkid = b.clkid
where a.clkdat between (select FORMAT(getdate(), 'yyyyMMdd'))
and (select FORMAT(getdate() + 1, 'yyyyMMdd'))
and devid in (10, 50)
) mak
GROUP BY clkid,clkdat,empnam,seccod
order by DEPT ASC
that resulted to image below
NAME DEPT IN OUT
Peter STP 647 NULL
Jordan FCW 647 NULL
Mark EE 724 NULL
Lebron STP NULL 810
Kobe STP NULL 813
Chris TR 729 NULL
Dray DC 705 NULL
if the a chance to get this result? if ever what query that i need to add/change? thanks
NAME DEPT IN OUT
Peter STP 647 NULL
Jordan FCW 647 NULL
Mark EE 724 NULL
Chris TR 729 NULL
Dray DC 705 NULL
Upvotes: 0
Views: 404
Reputation: 5432
You could add HAVING
clause to check your condition output: IN not null and OUT is null
:
SELECT
empnam AS Emp_Name,seccod AS DEPT,'' AS REMARKS
,MAX(CASE WHEN STAT = 'IN' THEN clktim END)[IN]
,MAX(CASE WHEN STAT = 'OUT' THEN clktim END) OUT
FROM
(
SELECT a.clkid,
CASE WHEN a.devid = '10' THEN 'IN' ELSE 'OUT' END AS STAT
, a.clkdat, a.clktim, b.empid, b.empnam, b.seccod,
ROW_NUMBER() OVER (PARTITION BY clkdat ORDER BY dateinsert) AS seqnum
FROM ClkInf a
INNER JOIN EmpInf b ON a.clkid = b.clkid
WHERE a.clkdat BETWEEN (SELECT FORMAT(getdate(), 'yyyyMMdd'))
AND (SELECT FORMAT(getdate() + 1, 'yyyyMMdd'))
AND devid IN (10, 50)
) mak
GROUP BY clkid, clkdat, empnam, seccod
HAVING MAX(CASE WHEN STAT = 'IN' THEN clktim END) IS NOT NULL
AND MAX(CASE WHEN STAT = 'OUT' THEN clktim END) IS NULL
ORDER BY DEPT ASC;
Upvotes: 1
Reputation:
You have to add one more extra FILTER condition:
select * from (
select
empnam as Emp_Name,seccod as DEPT,'' as REMARKS
,MAX(CASE WHEN STAT = 'IN' THEN clktim END) in_
,MAX(CASE WHEN STAT = 'OUT' THEN clktim END) OUT
from
(select a.clkid,
case when a.devid = '10' then 'IN' else 'OUT' end as STAT
, a.clkdat, a.clktim, b.empid, b.empnam, b.seccod,
row_number() over(partition by clkdat order by dateinsert) as seqnum
from ClkInf a
INNER JOIN EmpInf b ON a.clkid = b.clkid
where a.clkdat between (select FORMAT(getdate(), 'yyyyMMdd'))
and (select FORMAT(getdate() + 1, 'yyyyMMdd'))
and devid in (10, 50)
) mak
GROUP BY clkid,clkdat,empnam,seccod
order by DEPT ASC
) k
where in_ is not null;
Upvotes: 0