2011-11-28 15 views
7

Napisałem zapytanie jak tengrupa przez obliczonego pola w 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 

chcę przez grupę o produkcie? Jak to zrobić?

Odpowiedz

10

Co należy zrobić, to użyć podkwerendy dla kolumny aliasowanej CASE. Z zapytaniem jako podzapytaniem, jesteś w stanie group by swojej aliasowanej kolumny.

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

odpowiedź pracował me..thnx – Yogesh

+0

Działa to dla SUM, ale to przerwa na count (odrębną Col4). – SarekOfVulcan

6

Musisz mieć CASE w swoim Group By również. Nie można używać aliasu w 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

masz rację .. ale inna odpowiedź zadziałała dla mnie !!! – Yogesh

+0

@AdamWenger Próbowałem tego rozwiązania, ale jest uruchamiane bardzo wolno dla mnie. –