利用Oracle 10g的MODEL SQL进行行间计算
2008-08-27 12:43:57 来源:WEB开发网PARTITION BY (code)表示按工厂分区,即审核在一个工厂内的产品
MODEL 关键字后面的 RETURN UPDATED ROWS 子句将结果限制为在该查询中创建或更新的那些行。使用该子句是使结果集只包含新计算的值,在本例中就是审核结果
CODEP_IDV1
---------------------------
600001err10
600002err11
如果返回值=0,表示v1['30'] + v1['31'] =v1['10']审核通过,否则,审核不通过
SELECTcode,
p_id,v1,v2
FROMt603
WHEREcodeIN('600001','600002')
MODELRETURNUPDATEDROWS
PARTITIONBY(code)
DIMENSIONBY(p_id)
MEASURES(v1,v2)
RULES(
v1['err1']=v1['30']+v1['31']-v1['10'],
v2['err1']=v2['30']+v2['31']-v2['10'])
ORDERBYcode,p_id;
CODEP_IDV1V2
-------------------------------------
600001err100
600002err110
如果表格中包含多个维度的数据,比如时间,多个维度都可以编写规则,比如2008年的审核关系
SELECTyear,code,
p_id,v1
FROMt603_1
WHEREcodeIN('600001','600002')
MODELRETURNUPDATEDROWS
PARTITIONBY(code)
DIMENSIONBY(p_id,year)
MEASURES(v1)
RULES(
v1['err1',2008]=v1['30',2008]+v1['31',2008]-v1['10',2008])
ORDERBYcode,p_id;
YEARCODEP_IDV1
-------------------------------
2008600001err10
2008600002err11
赞助商链接