2011-11-28 20 views
7

He escrito una consulta como estagrupo por un campo calculado en SQL

CASE 
       WHEN [col1] = 's' THEN '1' 
       WHEN [col1] = 't' THEN '2' 
       WHEN [col1] = 'u' THEN '3' 
       WHEN [col2] = 'v' THEN '4' 
....... 
END AS product, 
SUM(col3) 
FROM dbo.TableA 

Quiero grupo por el producto? ¿Cómo hacer eso?

Respuesta

10

Lo que debe hacer es usar una subconsulta para su columna con alias CASE. Con su consulta como subconsulta, puede group by su columna con alias.

select product 
from 
(
    select 
    CASE 
     WHEN [col1] = 's' THEN '1' 
     WHEN [col1] = 't' THEN '2' 
     WHEN [col1] = 'u' THEN '3' 
     WHEN [col2] = 'v' THEN '4' 
    END AS product, 
    SUM(col3) as Col3Sum 
    FROM dbo.TableA 
) a 
group by product 
+0

su respuesta trabajado para me..thnx – Yogesh

+0

Esto funciona para SUM, pero sería romper para el recuento (col4 distinta). – SarekOfVulcan

6

Usted necesita tener la CASE en su Group By también. No se puede utilizar el alias en una GROUP BY

SELECT yourColumn, otherColumn 
    , CASE 
     WHEN [col1] = 's' THEN '1' 
     WHEN [col1] = 't' THEN '2' 
     WHEN [col1] = 'u' THEN '3' 
     WHEN [col2] = 'v' THEN '4' 
    END AS Product 
    , anotherColumn 
FROM yourTable 
GROUP BY CASE 
      WHEN [col1] = 's' THEN '1' 
      WHEN [col1] = 't' THEN '2' 
      WHEN [col1] = 'u' THEN '3' 
      WHEN [col2] = 'v' THEN '4' 
     END 
+0

tienes razón ... ¡pero otra respuesta funcionó para mí! – Yogesh

+0

@AdamWenger Probé esta solución, pero se corrió muy lento para mí. –

Cuestiones relacionadas