2011-11-28 9 views
7

ho scritto una query come questagruppo da un campo calcolato in 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 

Voglio gruppo da prodotto? Come si fa?

risposta

10

Quello che devi fare è usare una subquery per la tua colonna aliasta CASE. Con la tua query come subquery, sei in grado di group by la tua colonna con l'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

la risposta lavorato per me..thnx – Yogesh

+0

Questo funziona per SUM, ma si spezzerebbe per la conta (col4 distinti). – SarekOfVulcan

6

Sarà necessario avere il CASE in Group By pure. Non è possibile utilizzare l'alias in un 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

hai ragione..ma l'altra risposta ha funzionato per me !!! – Yogesh

+0

@AdamWenger Ho provato questa soluzione, ma per me è molto lenta. –