数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

利用Oracle10g的MODELSQL进行行间计算(一)


发布日期:2023年05月25日
 
利用Oracle10g的MODELSQL进行行间计算(一)

利用Oracle g的 MODEL SQL进行行间计算

以产品产量表为例一个工厂(用code表示)生产多种产品(用p_id表示)每种产品具有生产量(v)和销售量(v)

产品代码具有审核关系比如=+其中代表大类代表大类下的小类

SQL>createtablet(codevarchar()p_idvarchar()vnumber()vnumber());

Tablecreated

SQL>insertintotvalues();

SQL>insertintotvalues();

SQL>insertintotvalues();

SQL>insertintotvalues();

SQL>insertintotvalues();

SQL>insertintotvalues();

SQL>commit;

Commitcomplete

SQL>select*fromt;

CODEP_IDVV

rowsselected

SELECTcode

p_idv

FROMt

WHEREcodeIN()

MODELRETURNUPDATEDROWS

PARTITIONBY(code)

DIMENSIONBY(p_id)

MEASURES(v)

RULES(

v[err]=v[]+v[]v[])

ORDERBYcodep_id;

其中rule表示计算规则err表示这条审核关系的代号它的值等于P_ID为的v值+P_ID为的vP_ID为的v

PARTITION BY (code)表示按工厂分区即审核在一个工厂内的产品

MODEL 关键字后面的 RETURN UPDATED ROWS 子句将结果限制为在该查询中创建或更新的那些行使用该子句是使结果集只包含新计算的值在本例中就是审核结果

CODEP_IDV

err

err

如果返回值=表示v[] + v[] =v[]审核通过否则审核不通过

SELECTcode

p_idvv

FROMt

WHEREcodeIN()

MODELRETURNUPDATEDROWS

PARTITIONBY(code)

DIMENSIONBY(p_id)

MEASURES(vv)

RULES(

v[err]=v[]+v[]v[]

v[err]=v[]+v[]v[])

ORDERBYcodep_id;

CODEP_IDVV

err

err

如果表格中包含多个维度的数据比如时间多个维度都可以编写规则比如年的审核关系

SELECTyearcode

p_idv

FROMt_

WHEREcodeIN()

MODELRETURNUPDATEDROWS

PARTITIONBY(code)

DIMENSIONBY(p_idyear)

MEASURES(v)

RULES(

v[err]=v[]+v[]v[])

ORDERBYcodep_id;

YEARCODEP_IDV

err

err

如果维度不影响规则也可以只分区而沿用原来的规则

SELECTyearcode

p_idv

FROMt_

WHEREcodeIN()

MODELRETURNUPDATEDROWS

PARTITIONBY(codeyear)

DIMENSIONBY(p_id)

MEASURES(v)

RULES(

v[err]=v[]+v[]v[])

ORDERBYcodep_id;

YEARCODEP_IDV

err

err

SQL>createtablet_asselect*fromt_;

Tablecreated

SQL>insertintot_selectyearcodep_idvvfromt_;

rowscreated

如果表中具有多个年份的数据每个年份的审核结果都能显示

SELECTyearcode

p_idv

FROMt_

WHEREcodeIN()

MODELRETURNUPDATEDROWS

PARTITIONBY(codeyear)

DIMENSIONBY(p_id)

MEASURES(v)

RULES(

v[err]=v[]+v[]v[])

ORDERBYcodep_id;

YEARCODEP_IDV

err

err

err

err

               

上一篇:在ASP中利用Oracle Object for OLE访问Oracle 8

下一篇:Oracle弱智900问四