利用Oracle 10g的 MODEL SQL进行行间计算
以产品产量表为例,一个工厂(用code表示)生产多种产品(用p_id表示),每种产品具有生产量(v1)和销售量(v2)
产品代码具有审核关系,比如'10'='30'+'31',其中'10'代表大类,'30'和'31'代表'10'大类下的小类。
| SQL> create table t603 (code varchar(10),p_id varchar(7),v1 number(10),v2 number(10)); Table created. SQL> insert into t603 values('600001','30',1,1); SQL> insert into t603 values('600001','31',1,1); SQL> insert into t603 values('600001','10',2,2); SQL> insert into t603 values('600002','10',3,2); SQL> insert into t603 values('600002','31',2,1); SQL> insert into t603 values('600002','30',2,1); SQL> commit; Commit complete. SQL> select * from t603; CODE P_ID V1 V2 ---------- ------- ---------- ---------- 600001 30 1 1 600001 31 1 1 600001 10 2 2 600002 10 3 2 600002 31 2 1 600002 30 2 1 6 rows selected. SELECT code, p_id, v1 FROM t603 WHERE code IN ('600001','600002') MODEL RETURN UPDATED ROWS PARTITION BY (code) DIMENSION BY (p_id) MEASURES (v1) RULES ( v1['err1'] = v1['30'] + v1['31'] -v1['10']) ORDER BY code, p_id; |
其中rule表示计算规则,'err1'表示这条审核关系的代号,它的值等于P_ID为'30'的v1值+P_ID为'31'的v1值-P_ID为'10'的v1值
PARTITION BY (code)表示按工厂分区,即审核在一个工厂内的产品

