68.Oracle数据库SQL开发之 高级查询——使用MODEL子句
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49847085
10g中新增的MODEL子句可以用来进行行间计算。允许像访问数组中元素那样访问记录中的某个列。
查询获取2003年内每个月由员工21完成的产品类型为#1和#2的销量,并根据2003年的销售数据预测出2004年1月、2月和3月的销量。
store@PDB1> selectprd_type_id,year,month,sales_amount from all_sales where prd_type_id between 1and 2 and emp_id=21
model
partitionby (prd_type_id)
dimensionby (month,year)
measures(amount sales_amount) (sales_amount[1,2004]=sales_amount[1,2003],
sales_amount[2,2004]=sales_amount[2,2003]+sales_amount[3,2003],
sales_amount[3,2004]=round(sales_amount[3,2003]*1.25,2))
order byprd_type_id,year,month;
PRD_TYPE_ID YEAR MONTH SALES_AMOUNT
----------- ---------- ----------------------
1 2003 1 10034.84
1 2003 2 15144.65
1 2003 3 20137.83
1 2003 4 25057.45
1 2003 5 17214.56
1 2003 6 15564.64
1 2003 7 12654.84
1 2003 8 17434.82
1 2003 9 19854.57
1 2003 10 21754.19
1 2003 11 13029.73
1 2003 12 10034.84
1 2004 1 10034.84
1 2004 2 35282.48
1 2004 3 25172.29
2 2003 1 1034.84
2 2003 2 1544.65
2 2003 3 2037.83
2 2003 4 2557.45
2 2003 5 1714.56
2 2003 6 1564.64
2 2003 7 1264.84
2 2003 8 1734.82
2 2003 9 1854.57
2 2003 10 2754.19
2 2003 11 1329.73
2 2003 12 1034.84
2 2004 1 1034.84
2 2004 2 3582.48
2 2004 3 2547.29
30 rows selected.
PARTITION BY(prd_type_id) 指定结果是根据prd_type_id分区的。
DIMENSION BY(month,year)定义数组的位数是month和year
MEASURES(amount sales_amount)表名数组中的每个单元包好一个数量,同时表名数组名为sales_amount.