Как я могу преобразовать этот SQL в HQL-запрос - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть следующий запрос:

WITH CTE AS (
  SELECT MIN(att.Date) [minDate]
  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(minDate) FROM CTE

Мне нужно использовать его в приложении C #, но я не могу просто использовать запрос, так как он говорит, что запрос должен начинаться с выбора илиключевое слово.Мне нужен этот запрос для работы в HQL.Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

наконец-то это сработало с этими

SELECT count(att.AttDate) 
from Attendance att 
where att.Employee.EmployeeCD = "+ empCD +" 
and att.AttDate IN 
  (SELECT MIN(att.AttDate) 
  from Attendance att 
  where att.AttDate between '" + startDate.Date + "' and '" + endDate.Date + "' 
  and att.Employee.EmployeeCD = " +  empCD + " 
  GROUP BY EmployeeCD, CONVERT(VARCHAR,att.AttDate, 111)
  having min(CONVERT(VARCHAR, att.AttDate, 8)) > '08:10:00')
1 голос
/ 04 февраля 2012

Вы должны переписать запрос.

В результате мы вообще не заботимся о дате, то, что нас интересует, является общим результатом, поэтому мы можем удалить дату из 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 уникален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...