sous-total conditionnel pour chaque groupe dans la clause group by
Bonsoir à tous, j'ai une petite question pour voir si il est possible de faire une amélioration sur ce que j'ai fait (et j'en suis certain vu les experts ici).
J'ai la table suivante qui est la simplification d'une partie de requêtes SQL:
Code:
1 2 3
| City, Company, number1, number2
Bordeaux, Toto, 10, 1
Bordeaux, Toto2, 2, 5 |
Ce que je souhaite faire, c'est ajouter une sorte de sous-total conditionnel, en pratique, je veux ajouter pour chaque ville, un sous-total qui est la somme pour chaque entreprise des nombres qui sont inférieur à trois, en pratique le résultat que je souhaite:
Code:
1 2 3
| Bordeaux, Toto, 10, 1
Bordeaux, Toto2, 2, 5
Bordeaux, total, 2, 1 |
Voila ce que j'ai pensé:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| WITH TT AS
(
SELECT 'Bordeaux' City,'Toto' Company, 10 number1, 1 number2 FROM dual union ALL
SELECT 'Bordeaux','Toto2', 2,5 FROM dual
)
select city,company, sum(test1),sum(test2)
from
(
select city,decode(company,company,'total') as company, sum(case when number1 < 3 and number1 <>0 then number1 else 0 end) as test1, sum(case when number2 < 3 and number2 <>0 then number2 else 0 end) as test2
from tt
group by city,company
UNION
select * from tt
)
group by city, company; |
Ca a l'air de marcher, mais je pense pas avoir trouvé la solution la plus simple, peut-être avez vous une meilleure idée ?
De plus, quand j'ai une somme de 0 pour number1 et number2, je souhaiterais ne pas voir cette ligne "total", sauriez-vous comment faire ?
Merci d'avance.