Вы должны переписать запрос.
В результате мы вообще не заботимся о дате, то, что нас интересует, является общим результатом, поэтому мы можем удалить дату из select и заменить ее на EmpId *.
SELECT EmpID
FROM Attendance att
WHERE att.Date between '12/01/2011 00:00:00'
AND '12/31/2011 00:00:00'
AND att.EmpID = 4700
GROUP BY EmpID, CONVERT(VARCHAR, att.Date , 111)
HAVING MIN(CONVERT(VARCHAR, att.Date , 8)) > '09:00:00')
Нет, мы можем изменить вопрос на что-то вроде этого.
SELECT COUNT(EmpID) FROM Attendance WHERE EmpID IN (
SELECT EmpID
FROM Attendance att
WHERE att.Date between '12/01/2011 00:00:00'
AND '12/31/2011 00:00:00'
AND att.EmpID = 4700
GROUP BY EmpID, CONVERT(VARCHAR, att.Date , 111)
HAVING MIN(CONVERT(VARCHAR, att.Date , 8)) > '09:00:00')
);
Этот второй запрос перефразирует только выражение CTE, которое в большинстве случаев является только синтаксическим сахаром.Преобразование этого в HQL не должно быть проблемой.
* Я предполагаю, что EmpID уникален.