Я пытаюсь построить запрос Oracle SQL, используя оператор ROLLUP. Запрос должен суммировать продажи по годам, кварталам, штатам магазинов и городам магазинов за два года, с результатом, включающим промежуточные итоги для двух иерархических измерений «год/квартал» и «штат/город». Вот моя попытка до сих пор:
SELECT storestate, storecity, calyear, calquarter, SUM(sales) AS Sales
FROM store_dim, time_dim, sales_fact
WHERE sales_fact.storeid = store_dim.storeid
AND sales_fact.timenum = time_dim.timenum
AND (calyear BETWEEN 2011 AND 2012)
GROUP BY ROLLUP(calyear, calquarter, storestate, storecity);
Я пытаюсь выяснить, показывает ли запрос промежуточные итоги для двух иерархий, которые я ищу, вместо того, чтобы рассматривать их как одну большую. Попытка сопоставить уровни промежуточных итогов вручную не помогла, и я не смог найти примеров одного ROLLUP с четырьмя столбцами из двух измерений или примеров двух операторов ROLLUP в одном предложении GROUP BY, как показано ниже:
GROUP BY ROLLUP(calyear, cal quarter), ROLLUP(storestate, storecity)
Разбивка уровней промежуточных итогов, полученных с помощью двух предложений GROUP BY, была бы чрезвычайно полезной.
Изменить: здесь я специально использую ROLLUP. В противном случае GROUPING SETS обычно был бы первым выбором для такого рода запросов.