Невозможно использовать агрегат или подзапрос в выражении, используемом для списка group by предложения GROUP BY
в приведенной ниже инструкции sql я получаю следующую ошибку
невозможно использовать агрегат или подзапрос в выражении, используемом для group by список предложения 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