Нужно использовать COUNT внутри WHERE / HAVING, чтобы вернуться открытым и закрытым - PullRequest
0 голосов
/ 30 января 2020

NumberWrittenByOperator
NumberRemovedByOperator

Я использую следующие SQL в MsAccess:

SELECT [TagRegister Query - All].ReportedBy AS WrittenBy,
       Count([TagRegister Query - All].ReportedBy) AS Written,
       Count([TagRegister Query - All].RemovedBy) AS Removed
FROM [TagRegister Query - All]
GROUP BY [TagRegister Query - All].ReportedBy, [TagRegister Query - All].RemovedBy;

Я создал запрос вне таблицы, и это поиск данных из запроса. Я пытаюсь подсчитать количество сообщенных аномалий (ReportedBy / Written) и количество удаленных аномалий (RemovedBy / Removed).

Предположим, оператор сообщил о 5 аномалиях - но он удалил только 1, механизм c удалены 2, а остальные 2 все еще «открыты». но с этим я получаю

WrittenBy   Written  Removed 
Operator      1        1 
Operator      2        2 
Operator      2        0

Я хотел бы, чтобы он возвратил что-то более похожее на это:

WrittenBy   Written  Removed  Ratio
Operator      5        1       20%

Я хочу посмотреть, сколько он написал, сколько он удалил и как он выполняет - удаляя аномалии, о которых он сообщает

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

Можете ли вы мне помочь?

Я рад предоставить столько, сколько смогу, все еще новичок в Stack Overflow, так что терпите меня.

На рисунках показано число, написанное каждым оператором, и число, которое этот оператор удален. Таким образом, можно написать аномалию, и кто-то другой может закрыть ее. Если это возможно, я хотел бы показать номер, который они написали, и номер, который они удалили.

Спасибо за ваше время!

1 Ответ

1 голос
/ 30 января 2020

Сначала добавьте к возвращаемым столбцам вашего запроса столбец [TagRegister Query - All].RemovedBy:

SELECT [TagRegister Query - All].ReportedBy AS WrittenBy,
       [TagRegister Query - All].RemovedBy,
       Count([TagRegister Query - All].ReportedBy) AS Written,
       Count([TagRegister Query - All].RemovedBy) AS Removed
FROM [TagRegister Query - All]
GROUP BY [TagRegister Query - All].ReportedBy, [TagRegister Query - All].RemovedBy;

Затем используйте условное агрегирование для этого запроса, например:

SELECT t.WrittenBy,
  SUM(t.Written) AS Written,
  SUM(IIF(t.RemovedBy = t.WrittenBy, t.Written, 0)) AS Removed,
  ROUND(100.0 * Removed / Written, 2) & "%" AS Ratio
FROM (
    SELECT q.ReportedBy AS WrittenBy,
           q.RemovedBy,
           Count(q.ReportedBy) AS Written,
           Count(q.RemovedBy) AS Removed
    FROM [TagRegister Query - All] AS q
    GROUP BY q.ReportedBy, q.RemovedBy 
) AS t
GROUP BY t.WrittenBy

Я использовал псевдонимы для сделать код короче и более читабельным.

...