Frage

Ich versuche, einen Bericht zu erstellen, die eine Zusammenfassung für jede Gruppe hat. Zum Beispiel:

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

Ich habe eine Abfrage, die alles außer den TOTAL Spalten tun können:

       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 ;

Ich bin nur nicht sicher, wie eine Zusammenfassung auf einer Gruppe zu erhalten. In diesem Fall versuche ich, eine Summe von COUNT für jede Gruppe von ID zu erhalten.

UPDATE:

Die Gruppen sind nach Art. Vergessen, dass in der ursprünglichen Nachricht.

TOTAL ist SUM (COUNT) für jede Gruppe.

War es hilfreich?

Lösung

Wie wäre es mit ROLLUP wie ...

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 ;

Dies funktioniert für ein ähnliches Beispiel in meiner Datenbank, aber ich habe es nur über zwei Spalten, nicht sicher, wie es funktioniert über mehr ...
Hoffe, das ist hilfreich,
Craig ...

EDIT: In einer ROLLUP, Spalten Sie wollen summieren, aber nicht über eine Zwischensumme wie id und data_nam sollte innerhalb der ROLLUP in Klammern zusammen in einen Topf geworfen werden)

Andere Tipps

Unter der Annahme, SQL * Plus, Sie so etwas tun könnten:

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;

Ich kann diese Arbeit nicht in PL / SQL Developer macht 8, nur SQL * Plus. Nicht einmal das Befehlsfenster funktioniert ...

Versuchen Sie, eine Unterabfrage, die die Anzahl aller Elemente des Typs zurückgibt. Dies würde

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 ;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top