Question

Je suis en train de créer un rapport qui a un résumé pour chaque groupe. Par exemple:

ID           NAME              COUNT           TOTAL     TYPE
-------------------------------------------------------------
1            Test 1            10                         A
2            Test 2            8                          A
                                               18

7            Mr. Test          9                          B
12           XYZ               4                          B
                                               13

25           ABC               3                          C
26           DEF               5                          C
19           GHIJK             1                          C
                                               9

J'ai une requête qui peut tout faire, sauf les colonnes TOTAL:

       select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
       from some_data sd, data_defs defs
       where sd.data_def_id = defs.data_def_id
       group by some_data.type, some_data.id, defs.data_nam
       order by some_data.id asc, count(amv.MSG_ID) desc ;

Je ne suis pas sûr de savoir comment obtenir un résumé sur un groupe. Dans ce cas, je vais essayer d'obtenir une somme de comptage pour chaque groupe d'ID.

Mise à jour:

Les groupes sont par type. Vous avez oublié que le message original.

TOTAL est SUM (COUNT) pour chaque groupe.

Était-ce utile?

La solution

Comment l'utilisation ROLLUP comme ...

select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type from some_data sd, data_defs defs where sd.data_def_id = defs.data_def_id group by ROLLUP(some_data.type, (some_data.id, defs.data_nam)) order by some_data.id asc, count(amv.MSG_ID) desc ;

Cela fonctionne pour un exemple similaire dans ma base de données, mais je ne l'a fait sur deux colonnes, ne sais pas comment il fonctionne sur plus ...
Espérons que cela est utile,
Craig ...

EDIT: Dans un ROLLUP, les colonnes que vous voulez, mais pas la somme sur le sous-total sur comme id et data_nam devraient être regroupées ensemble à l'intérieur du ROLLUP dans paranthèses)

Autres conseils

En supposant SQL * Plus, vous pouvez faire quelque chose comme ceci:

col d1 noprint
col d2 noprint
WITH q AS
(SELECT sd.id, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
   FROM some_data sd JOIN data_defs defs ON (sd.data_def_id = defs.data_def_id)
  GROUP BY some_data.type, some_data.id, defs.data_nam)
SELECT 1 d1, type d2, id, count, name FROM q
UNION ALL
SELECT 2, type, null, null, null, SUM(count) FROM q GROUP BY 2, type
 ORDER BY 2,1,3;

Je ne peux pas faire ce travail en PL / SQL Developer 8, que SQL * Plus. Pas même la fenêtre de commande fonctionnera ...

Essayez une sous-requête qui renvoie le nombre de tous les éléments du type. Cela

select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, tot.TOTAL_FOR_TYPE, defs.data_name NAME, sd.type
   from some_data sd, data_defs defs, 
      (select count(sd2.DATA_DEF_ID) TOTAL_FOR_TYPE 
       from some_data sd2
       where sd2.type = sd.type) tot
   where sd.data_def_id = defs.data_def_id
   group by some_data.type, some_data.id, defs.data_nam
   order by some_data.id asc, count(amv.MSG_ID) desc ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top