簡體   English   中英

Oracle SQL中四列上的ROLLUP小計級別

[英]Subtotal levels for ROLLUP on four columns in Oracle SQL

我正在嘗試使用ROLLUP運算符構造一個Oracle SQL查詢。 該查詢需要匯總兩年中的年,季度,商店狀態和商店城市的銷售額,其結果包括年/季度和州/城市兩個層次維度的小計。 到目前為止,這是我的嘗試:

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的示例,或者在單個GROUP BY子句中找到兩個ROLLUP運算符的示例,如下所示:

GROUP BY ROLLUP(calyear, cal quarter), ROLLUP(storestate, storecity)

對兩個GROUP BY子句產生的小計級別進行細分將非常有幫助。

編輯:我專門在這里使用ROLLUP。 否則,分組集通常是此類查詢的首選。

使用grouping sets 以及正確,明確, 標准的 join語法:

select s.storestate, s.storecity, t.calyear, t.calquarter,
       sum(sf.sales) AS Sales
from sales_fact sf join
     store_dim s
     on s.storeid = sf.storeid join
     time_dim t 
     on sf.timenum = t.timenum
where calyear between 2011 and 2012
group by grouping sets ( (calyear, calquarter, storestate, storecity),
                         (calyear, calquarter), (storestate, storecity)
                       );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM