Ich möchte ein Ergebnis in folgendem Format eingestellt zurückzukehren:Oracle - zurückkehrende Summensumme sowie gelenkte Summensummen?
YEARMONTH Total ModelA ModelB ModelC
200101 0 0 0 0
200102 10 5 5 0
200103 8 2 2 4
wobei die Summe die Summe der Stunden für alle Modelltypen von yearmonth und die einzelnen Modellspalten sind die Summe der Stunden pro Modell sortiert ist Typ gruppiert nach Jahr Monat. Ich kann die richtigen Ergebnisse mithilfe der folgenden Abfrage mit verschachtelten wählt erhalten:
select distinct yearmonth,
sum(a.hours) as Total,
(select sum(b.hours) from model_hours b
where model = 'ModelA' and a.yearmonth = b.yearmonth) as ModelA,
(select sum(b.hours) from model_hours b
where model = 'ModelB' and a.yearmonth = b.yearmonth) as ModelB,
(select sum(b.hours) from model_hours b
where model = 'ModelC' and a.yearmonth = b.yearmonth) as ModelC
from model_hours a
group by yearmonth
order by yearmonth
ich neugierig war 11 unter Verwendung der Pivot-Funktion in Oracle versuchen, die gleichen Ergebnisse zu erzielen, und bin in der Lage, alle Ergebnisse mit Ausnahme der insgesamt zu erhalten Stunden die folgende Abfrage verwenden:
select * from (
select yearmonth, hours, model
from model_hours a
)
pivot
(
sum(hours)
for model in ('ModelA', 'ModelB', 'ModelC')
)
order by yearmonth
, die dieses Ergebnis zurückgibt:
YEARMONTH ModelA ModelB ModelC
200101 0 0 0
200102 5 5 0
200103 2 2 4
ich habe nicht in der Lage gewesen, um herauszufinden, wie auch die Summe der Stunden für alle Modelle zu erhalten, g rouped by yearmonth, in dieser Ergebnismenge. Ist es möglich? Und wenn ja, wäre es wahrscheinlich effizienter als die verschachtelten Selects? Diese bestimmte Tabelle hat gerade einige 200K Zeilen.