Как «посчитать» два разных критерия из одного столбца в таблице? - PullRequest
2 голосов
/ 19 июня 2019

Я пытаюсь написать простой запрос, который группирует по дням, заполняет один столбец с количеством «действительных» и «работающих» точек за этот день, а другой столбец - с количеством всех «действительных» точек. Таким образом, столбцы результата будут: «День», «RunNum», «TotalNum». Он читает из таблицы с колонками «TheDate», «Running» и «ValidPoint».

Я могу создать столбцы «RunNum» и «TotalNum» по отдельности, изменив оператор «FROM» в соответствии с конкретными критериями столбца. Тем не менее, я начинающий с SQL и мне нужно несколько советов о том, как читать два разных критерия из одной таблицы.

Это то, что я написал для создания RunNum:

SELECT TheDate AS Day, count(Running) AS RunNum
FROM Source_Table
WHERE Running = "Runtime" AND ValidPoint = "yes"
GROUP BY TheDate;

И это для создания TotalNum:

SELECT TheDate AS Day, count(Running) AS TotalNum
FROM Source_Table
WHERE ValidPoint = "yes"
GROUP BY TheDate;

Я пытался использовать метод SUM (CASE WHEN ...), описанный в этом посте , но он продолжал выдавать сообщение об ошибке синтаксиса, когда я пытался запустить его:

SELECT TheDate As Day, SUM(CASE WHEN Running = "Runtime" THEN 1 ELSE 0 END) AS RunNum, COUNT(Running) AS TotalNum
FROM Source_Table
WHERE ValidPoint = "yes"
GROUP BY TheDate;

Я подозреваю, что мне понадобится использовать табличные "псевдонимы" в операторе from, но все, что я читал о них до сих пор, сбивает с толку. Любая помощь или руководство в правильном направлении для дальнейших исследований будет высоко ценится. Спасибо, что нашли время, чтобы прочитать это!

1 Ответ

2 голосов
/ 19 июня 2019

В MS Access для условного агрегирования используется IIF() вместо CASE:

SELECT TheDate As Day,
       SUM(IIF(Running = "Runtime", 1, 0)) AS RunNum,
       COUNT(*) AS TotalNum
FROM Source_Table
WHERE ValidPoint = "yes"
GROUP BY TheDate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...