Получить количество строк, возвращенных набором результатов запроса без ROWCOUNT

#sql #sql-server #tsql #join #count

#sql #sql-сервер #tsql #Присоединиться #количество

Вопрос:

У меня есть запрос ниже, который даст мне идентификатор сотрудника и количество раз, когда он входил в приложение

 SELECT E.[EmployeeId], COUNT(*) LoginCount
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
  

Я хотел бы получить тех сотрудников, которые вошли в систему больше определенного порога, позвольте мне взять 100.

 SELECT E.[EmployeeId], COUNT(*) LoginCount
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
HAVING COUNT(*) > 100
  

Теперь я хотел бы получить количество, возвращенное приведенным выше запросом, я имею в виду количество сотрудников, которые заходили на мой сайт более 100 раз.

Я попробовал @@ROWCOUNT , и он возвращает количество пользователей, но это возвращает 2 набора результатов, и я ищу, есть ли лучший способ вместо использования @@ROWCOUNT .

Ответ №1:

Просто используйте ваш текущий запрос в качестве подзапроса.

 SELECT COUNT(*)
FROM (
    SELECT E.[EmployeeId], COUNT(*) LoginCount
    FROM tblEmployee E
    JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
    WHERE AL.[AccessType] = 212
    GROUP BY E.[EmployeeId]
    HAVING COUNT(*) > 100
) X
  

Ответ №2:

Использование оконного COUNT :

 Select E.[EmployeeId], COUNT(*) LoginCount, COUNT(*) OVER() AS cnt_of_Employee
FROM tblEmployee E
JOIN tblAccessLog AL ON E.EmployeeId = AL.EmployeeId
WHERE AL.[AccessType] = 212
GROUP BY E.[EmployeeId]
HAVING COUNT(*) > 100