熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

利用Oracle10g的MODELSQL進行行間計算(一)

2013-11-13 15:33:30  來源: Oracle 

  利用Oracle g的 MODEL SQL進行行間計算

  以產品產量表為例一個工廠(用code表示)生產多種產品(用p_id表示)每種產品具有生產量(v)和銷售量(v)

  產品代碼具有審核關系比如=+其中代表大類代表大類下的小類

         SQL> create table t (code varchar()p_id varchar()v number()v number());
  Table created
  SQL> insert into t values();
  SQL> insert into t values();
  SQL> insert into t values();
  SQL> insert into t values();
  SQL> insert into t values();
  SQL> insert into t values();
  SQL> commit;
  Commit complete
  SQL> select * from t;
  CODE P_ID V V
     
     
     
     
     
     
     
   rows selected
  SELECT code
  p_id v
  FROM t
  WHERE code IN ()
  MODEL RETURN UPDATED ROWS
  PARTITION BY (code)
  DIMENSION BY (p_id)
  MEASURES (v)
  RULES (
  v[err] = v[] + v[v[])
  ORDER BY code p_id;

  其中rule表示計算規則err表示這條審核關系的代號它的值等於P_ID為的v值+P_ID為的vP_ID為的v

  PARTITION BY (code)表示按工廠分區即審核在一個工廠內的產品

  MODEL 關鍵字後面的 RETURN UPDATED ROWS 子句將結果限制為在該查詢中創建或更新的那些行使用該子句是使結果集只包含新計算的值在本例中就是審核結果

         CODE P_ID V
    
   err 
   err 

  如果返回值=表示v[] + v[] =v[]審核通過否則審核不通過

         SELECT code
  p_id vv
  FROM t
  WHERE code IN ()
  MODEL RETURN UPDATED ROWS
  PARTITION BY (code)
  DIMENSION BY (p_id)
  MEASURES (vv)
  RULES (
  v[err] = v[] + v[v[]
  v[err] = v[] + v[v[])
  ORDER BY code p_id;
  CODE P_ID V V
     
   err  
   err  

  如果表格中包含多個維度的數據比如時間多個維度都可以編寫規則比如年的審核關系

       SELECT yearcode
  p_id v
  FROM t_
  WHERE code IN ()
  MODEL RETURN UPDATED ROWS
  PARTITION BY (code)
  DIMENSION BY (p_idyear)
  MEASURES (v)
  RULES (
  v[err] = v[] + v[v[])
  ORDER BY code p_id;
  YEAR CODE P_ID V
     
    err 
    err 

  如果維度不影響規則也可以只分區而沿用原來的規則

         SELECT yearcode
  p_id v
  FROM t_
  WHERE code IN ()
  MODEL RETURN UPDATED ROWS
  PARTITION BY (codeyear)
  DIMENSION BY (p_id)
  MEASURES (v)
  RULES (
  v[err] = v[] + v[v[])
  ORDER BY code p_id;
  YEAR CODE P_ID V
     
    err 
    err 
  SQL> create table t_ as select * from t_;
  Table created
  SQL> insert into t_ select  yearcodep_idvv from t_;
   rows created

  如果表中具有多個年份的數據每個年份的審核結果都能顯示

         SELECT yearcode
  p_id v
  FROM t_
  WHERE code IN ()
  MODEL RETURN UPDATED ROWS
  PARTITION BY (codeyear)
  DIMENSION BY (p_id)
  MEASURES (v)
  RULES (
  v[err] = v[] + v[v[])
  ORDER BY code p_id;
  YEAR CODE P_ID V
     
    err 
    err 
    err 
    err 


From:http://tw.wingwit.com/Article/program/Oracle/201311/16914.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.