2012-03-26 24 views
6

En la siguiente declaración SQL recibo el siguiente error 'No se puede usar un agregado o una subconsulta en una expresión utilizada para el grupo por lista de una cláusula GROUP BY. ' ¿Cómo puedo evitar esto?No se puede usar un agregado o una subconsulta en una expresión utilizada para el grupo por lista de una cláusula 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 

Respuesta

10

Solo que incluya en su T.ClientGROUP BY, sólo se puede incluir dentro de ese campo una función de agregado. En su caso, la agrupación por ese campo cambia la lógica, por lo que queda fuera (y está relacionada con su intento de agrupar por la declaración CASE). En su lugar, envuelva T.Client en una función agregada.

De esta forma, sus grupos siguen siendo los mismos, y cuando solo hay una fila, según la prueba de su declaración CASE, sabrá qué resultado va a proporcionar la función agregada.

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 
2

No necesita agrupar por esa expresión 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 
+0

Estoy bastante seguro de que la referencia a 'T.Client' no será válida aquí debido a que no forma parte de la agrupación. Probablemente necesite definir esa columna a través de una subconsulta correlacionada. –

+0

@Daniel Tienes razón. No le presté atención a esa parte. Fijo. – Tomalak

Cuestiones relacionadas