Oracle
 sql >> Base de données >  >> RDS >> Oracle

fonction de cumul oracle avec plusieurs colonnes

Je trouve plutôt plus facile de spécifier les ensembles exacts dont j'ai besoin avec la clause GROUPING SET :

WITH data(val1, val2, val3) AS
     ( SELECT 'a' ,'a-details' ,'1' FROM DUAL
     UNION ALL
     SELECT 'b' ,'b-details' ,'2' FROM DUAL
     UNION ALL
     SELECT 'c' ,'c-details' ,'3' FROM DUAL
     )
SELECT NVL(val1,'Total Result'),
     val2,
     SUM(val3) tot
from data
group by grouping sets ((val1, val2),());

Je soupçonne qu'il est plus efficace, car il spécifie directement les niveaux à calculer.

http://sqlfiddle.com/#!4/8301d/3

CUBE et ROLLUP sont pratiques pour générer automatiquement un grand nombre de niveaux d'agrégation (par exemple, chaque niveau d'une hiérarchie dimensionnelle), et il peut être utile d'utiliser GROUPING ID si vous souhaitez éliminer un petit sous-ensemble de niveaux d'un grand CUBE généré ensemble, mais GROUPING SET est précisément conçu pour spécifier des niveaux d'agrégation particuliers.