标签: MODEL SQL

  • 利用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(1
    0));
    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 值PARTITION BY (code)表示按工廠分區,即審核在一個工廠內的產品MODEL 關鍵字後面的RETURN UPDATED ROWS 子句將結果限制為在該查詢中創建或更新的那些行。使用該子句是使結果集只包含新計算的值,在本例中就是審核結果

    CODEP_IDV1
    —————————
    600001err10
    600002err11
    如果返回值=0,表示v1[’30’] + v1[’31’] =v1[’10’]審核通過,否則,審核不通過

    (更多…)