Tag Archives: 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'] + [...]

10G, Oracle Also tagged , , Leave a comment