Это довольно просто в SQL.Вы можете GROUP BY по имени сотрудника, чтобы получить общий счет.Добавление GROUP BY в оператор SQL позволит вам выполнять агрегатные функции для одного или нескольких столбцов.Агрегатные функции включают COUNT, SUM, MIN и MAX.
Документацию о GROUP BY можно найти здесь: https://support.office.com/en-us/article/group-by-clause-84eeb766-25d2-4aa1-8eea-002bb65ef3a0
Несколько примеров:
Этот запрос группируется поEmployeeName, чтобы получить общее количество всех строк в таблице по имени сотрудника.
SELECT
EmployeeName
, COUNT(*) AS NumberOfEvents
FROM table
GROUP BY EmployeeName
Кроме того, если вы хотите получить значения по вечерним именам и именам сотрудников, вы можете сгруппировать их по имени сотрудника и по вечернему времени.Затем в запросе будет показано количество событий каждого типа для каждого имени сотрудника.
SELECT
EmployeeName
, EventId
, COUNT(*) AS NumberOfEvents
FROM table
GROUP BY
EmployeeName
, EventId
Если вы хотите отфильтровать результаты так, чтобы отображался только один сотрудник, «Leroy Jenkins», то вы можете добавитьтакже предложение WHERE, например:
SELECT
EmployeeName
, COUNT(*) AS NumberOfEvents
FROM table
WHERE EmployeeName = "Leroy Jenkins"
GROUP BY EmployeeName
Ответ на комментарий @ WesG с просьбой пояснить.
Агрегатные функции, такие как COUNT, "сворачивают" несколько строкв таблице и отображая одно значение для этих строк.Если ваш оператор SELECT не содержит предложение GROUP BY, то агрегатные функции работают со всеми строками таблицы.
Если у вас есть предложение GROUP BY, тогда агрегатные функции будут работать с каждой группойстроки, которые имеют одинаковые значения в столбцах, по которым вы группируете.Кроме того, если вы включите предложение GROUP BY, то вы не сможете ВЫБРАТЬ столбцы, которые не являются GROUPing BY.
Итак, если у вас есть такая таблица:
CREATE TABLE [dbo].[AuditTrailLogs](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[EventType] nvarchar(20) NOT NULL,
[EventId] [int] NOT NULL,
[Message] [nvarchar](max) NULL,
[WhoDidIt] [nvarchar](50) NULL,
[WhenOccurredUtc] [datetime] NOT NULL,
[EntityPayload] [nvarchar](max) NULL,
)
Вы можете посчитать общее количество строк в таблице следующим образом:
SELECT COUNT(*) AS NumLogEntries
FROM dbo.AuditTrailLogs
Если вы хотите подсчитать строки пользователем, который сделал запись:
SELECT WhoDidIt, COUNT(*) AS NumLogEntries
FROM dbo.AuditTrailLogs
GROUP BY WhoDidIt
Затем Access разделит строки в таблице на несколько групп, и COUNT вернет записи журнала номеров для каждого отдельного значения WhoDidIt в таблице.
Если вы хотите просмотреть итоги по пользователю, которыйсделал запись в журнале и тип события, затем вы можете сгруппировать по обоим столбцам:
SELECT WhoDidIt, EventType, COUNT(*) AS NumLogEntries
FROM dbo.AuditTrailLogs
GROUP BY WhoDidIt, EventType
Теперь NumLogEntries в каждой строке набора результатов будет суммой для каждого типа событиячто сделал каждый пользователь.
Access будет жаловаться, если вы попытаетесь сделать что-то подобное, хотя:
SELECT Id, WhoDidIt, EventType, COUNT(*) AS NumLogEntries
FROM dbo.AuditTrailLogs
GROUP BY WhoDidIt, EventType
Если вы думаете об этом, этот запрос не имеет смысла.Агрегатные функции COUNT говорят, что вы хотите свернуть несколько строк и отобразить одно значение для всех этих строк, однако вы также просите просмотреть значение, которое не является частью группы и отличается для каждой строки в таблице..