利用Oracle 10g的MODEL SQL进行行间计算
2008-08-27 12:43:57 来源:WEB开发网利用Oracle 10g的 MODEL SQL进行行间计算
以产品产量表为例,一个工厂(用code表示)生产多种产品(用p_id表示),每种产品具有生产量(v1)和销售量(v2)
产品代码具有审核关系,比如'10'='30'+'31',其中'10'代表大类,'30'和'31'代表'10'大类下的小类。
SQL>createtablet603(codevarchar(10),p_idvarchar(7),v1number(10),v2number(10));
Tablecreated.
SQL>insertintot603values('600001','30',1,1);
SQL>insertintot603values('600001','31',1,1);
SQL>insertintot603values('600001','10',2,2);
SQL>insertintot603values('600002','10',3,2);
SQL>insertintot603values('600002','31',2,1);
SQL>insertintot603values('600002','30',2,1);
SQL>commit;
Commitcomplete.
SQL>select*fromt603;
CODEP_IDV1V2
-------------------------------------
6000013011
6000013111
6000011022
6000021032
6000023121
6000023021
6rowsselected.
SELECTcode,
p_id,v1
FROMt603
WHEREcodeIN('600001','600002')
MODELRETURNUPDATEDROWS
PARTITIONBY(code)
DIMENSIONBY(p_id)
MEASURES(v1)
RULES(
v1['err1']=v1['30']+v1['31']-v1['10'])
ORDERBYcode,p_id;
其中rule表示计算规则,'err1'表示这条审核关系的代号,它的值等于P_ID为'30'的v1值+P_ID为'31'的v1值-P_ID为'10'的v1值
更多精彩
赞助商链接