概述
利用 SQL MODEL 子句您可以根據查詢結果定義多維數組然後將規則應用於該數組以計算新值這些規則可以是復雜的相互依賴的計算與外部解決方案相比通過將高級計算集 成到數據庫中可以大幅度提升性能可伸縮性以及可管理性用戶可以將數據保留在 Oracle 環境內而無需將數據復制到單獨的應用程序或 PC 電子表格中
MODEL 子句通過將查詢列映射到以下三組來定義多維數組分區列維度列和度量列這些元素執行以下任務
分區以類似於分析函數的分區方式(在數據倉庫指南中標題為數據倉庫中用於分析的 SQL的一章中有述)來定義結果集的邏輯塊將 MODEL 規則應用於每分區的單元格
維度用於標識分區內的每個度量單元格這些列用於標識日期區域以及產品名之類的特征
度量類似於星型模式中事實表的度量它們通常包含數值例如銷售單位或成本通過指定每個單元格的完整維度組合可以在單元格所處的分區內對其進行訪問
要針對這些多維數組創建規則您需要定義以維度值形式表達的計算規則規則靈活且簡潔並且可以使用通配符和 FOR 循環以最大限度地表達您的意圖利用 MODEL 子句構建的計算通過將分析集成到數據庫中改善了傳統的電子表格計算通過符號引用提高了可讀性並提供了可伸縮性和更好的可管理性
測試案例:
按月份得到quantity的累加值
SQL> with tmp as (
select Jan Month Quantity from dual
union
select Feb from dual
union
select Mar from dual
union
select Apr from dual
union
select May from dual ) select MonthQuantity_count from
tmp
model ignore nav /* &keep nav*/
partition by (X as x)
dimension by (Month)
measures (Quantity as Quantity_count)
rules
(Quantity_count[Jan]=Quantity_count[Jan] Quantity_count[Feb]=Quantity_count[Jan]+Quantity_count[Feb] Quantity_count[Mar]=Quantity_count[Feb]+Quantity_count[Mar] Quantity_count[Apr]=Quantity_count[Mar]+Quantity_count[Apr]
Quantity_count[May]=Quantity_count[Apr]+Quantity_count[May]
)
/
MONTH QUANTITY_COUNT
Apr
Feb
Jan
Mar
May
SQL>
同樣累加值也可以通過下面語句得到
SQL>
SQL> with tmp as (
select Month Quantity from dual
union
select from dual
union
select from dual
union
select from dual
union
select from dual )select tmonthsum(tquantity) Quantity_count
from tmp t left join tmp t
on tmonth<=tmonth group by tmonth
order by
/
MONTH QUANTITY_COUNT
SQL>
其中指定ignore nav&keep nav處理NULL度量和缺失單元格
更多說明及案例請參考ORACLE官方說明
sqlmodel/
From:http://tw.wingwit.com/Article/program/Oracle/201311/16907.html