Невозможно использовать агрегат или подзапрос в выражении, используемом для группы по списку предложения GROUP BY

В приведенном ниже sql-заявлении я получаю следующую ошибку "Невозможно использовать агрегат или подзапрос в выражении, используемом для группы по списку предложения GROUP BY". Как я могу обойти это?

SELECT
 T.Post,
 COUNT(*) AS ClientCount,
 Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
FROM
 MyTable T
GROUP BY
 T.Post,
 CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
2 ответа

Если вы не включили T.Client в GROUP BY, вы можете включить это поле только в агрегатную функцию. В вашем случае группировка по этому полю изменяет логику, так что выход (и связан с вашей попыткой группировать по оператору CASE). Вместо этого заверните T.Client в агрегированную функцию.

Таким образом, ваши группы все те же, и когда есть только одна строка, в соответствии с вашим тестовым тестом CASE, вы знаете, какой результат будет выполнять совокупная функция.

SELECT
 T.Post,
 ClientCount = COUNT(*) AS ClientCount,
 Client = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
FROM
 MyTable T
GROUP BY
 T.Post


Вам не нужно группировать это выражение CASE.

SELECT
 T.Post,
 COUNT(*) AS ClientCount,
 CASE COUNT(*) WHEN '1' THEN MIN(T.Client) ELSE '[Clients]' END Client
FROM
 MyTable T
GROUP BY
 T.Post

licensed under cc by-sa 3.0 with attribution.