Я хочу вернуть результирующий набор в следующем формате:Oracle - возвращающая суммарная сумма, а также сводные суммарные суммы?
YEARMONTH Total ModelA ModelB ModelC
200101 0 0 0 0
200102 10 5 5 0
200103 8 2 2 4
, где общая сумма сумма часов для всех типов моделей, сгруппированных по годМесяц, а отдельные столбцы модели являются суммой часов в модели тип сгруппирован по месяцам. Я могу получить правильные результаты с помощью следующего запроса с вложенными выбирает:
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
мне было любопытно попробовать использовать функцию поворота в Oracle 11, чтобы достичь тех же результатов, и я в состоянии получить все результаты КРОМЕ общего часов, используя следующий запрос:
select * from (
select yearmonth, hours, model
from model_hours a
)
pivot
(
sum(hours)
for model in ('ModelA', 'ModelB', 'ModelC')
)
order by yearmonth
который возвращает этот результат:
YEARMONTH ModelA ModelB ModelC
200101 0 0 0
200102 5 5 0
200103 2 2 4
Я не был в состоянии понять, как же получить сумму часов для всех моделей, г в течение года, в этот набор результатов. Является ли это возможным? И если это так, возможно, это будет более эффективно, чем вложенные selects? Эта конкретная таблица имеет около 200 тыс. Строк прямо сейчас.