【发布时间】:2015-07-27 14:59:04
【问题描述】:
我有这样的查询来提取数据:
SELECT
e.EmpName,
d.DepartmentName,
l.EnrollNumber,
v.VerifyModeName,
CAST(PunchTime as DATE)Check_Date,MIN(CAST(PunchTime as Time))[TimeIN], MAX(Cast(PunchTime as Time))[TimeOUT],
RIGHT('0' + CAST(DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) % 60 AS VARCHAR),2) as Duration
FROM
Department d,
VerifyModes v,
Employee e
FULL OUTER JOIN AttLog l
ON e.EnrollNumber=l.EnrollNumber
WHERE
e.DeptID = d.Id
AND l.VerifyMode = v.VerifyModeId
GROUP BY
e.EmpName, d.DepartmentName, l.EnrollNumber, v.VerifyModeName, CAST(PunchTime as DATE)
ORDER BY Check_Date
结果是这样的:
虽然我已经包含了full outer join 条件。
如果我只使用:
select e.EmpName, l.PunchTime
from Employee e
full outer join AttLog l
on e.EnrollNumber = l.EnrollNumber
结果显示Employee 和NULL PunchTime:
那么,如何修复上述查询以获得包含NULL PunchTime 的结果?
然后,当我添加日期条件时,查询仍然没有再次显示 NULL 。如何纠正?
SELECT
e.EmpName,
d.DepartmentName,
l.EnrollNumber,
v.VerifyModeName,
CAST(PunchTime as DATE)Check_Date,MIN(CAST(PunchTime as Time))[TimeIN], MAX(Cast(PunchTime as Time))[TimeOUT],
RIGHT('0' + CAST(DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(DATEDIFF(SECOND, MIN(CAST(PunchTime as Time)), MAX(Cast(PunchTime as Time))) % 60 AS VARCHAR),2) as Duration
FROM Department d
INNER JOIN Employee e
ON e.DeptID = d.Id
LEFT JOIN AttLog l
ON e.EnrollNumber = l.EnrollNumber
LEFT JOIN VerifyModes v
ON l.VerifyMode = v.VerifyModeId
WHERE cast(l.PunchTime as Date) between '2015-07-22' and '2015-07-22'
GROUP BY
e.EmpName, d.DepartmentName, l.EnrollNumber, v.VerifyModeName, CAST(PunchTime as DATE)
ORDER BY Check_Date
【问题讨论】:
-
把日期比较放在
ON子句中。
标签: sql-server