2014-05-13 7 views
0

je le tableau suivant:SQL « fente » groupe par

('cat', 5000, 7000, 'A'), 
('dog', 9200, 11000, 'A'), 
('fog', 6500, 9300, 'B'), 
('fox', 16001, 15001, 'B'), 
('cat', 5005, 7005, 'B'), 
('dog', 9299, 11399, 'B'), 
('cat', 5005, 7005, 'B'), 
('dog', 9299, 11399, 'B'), 
('fox', 16001, 15002, 'A') 

je dois obtenir un groub de sélection par la première colonne, puis 4 colonnes avec la somme de:

col2 pour un drapeau,

col3 un drapeau,

col2 pour l'indicateur B et

col3 B f décalage.

Comment puis-je obtenir ceci?

SQLFiddle

+1

S'il vous plaît ajouter des résultats de requête attendus. –

+0

@ M.Massias Le résultat attendu est dans la réponse acceptée maintenant ^.^ – mauretto

Répondre

3
SELECT 
    Animal, 
    SUM(CASE WHEN flg = 'A' THEN V1 ELSE 0 END) AS A_V1, 
    SUM(CASE WHEN flg = 'A' THEN V2 ELSE 0 END) AS A_V2, 
    SUM(CASE WHEN flg = 'B' THEN V1 ELSE 0 END) AS B_V1, 
    SUM(CASE WHEN flg = 'B' THEN V2 ELSE 0 END) AS B_V2 
FROM 
    MyTab 
GROUP BY 
    Animal 
+0

+1. [Violon pour vos trucs]] (http://sqlfiddle.com/#!2/ca8da/22) – potashin

0
select animal, 
    SUM(If(flg='A',V1,0)), 
    SUM(If(flg='A',V2,0)), 
    SUM(If(flg='B',V1,0)), 
    SUM(If(flg='B',V2,0)) 
from MyTab 
group by animal