return: text lang: plpgsql parameters: p0: type: text name: i_table p1: type: text name: i_option src: | DECLARE _TABLE text; _VIEWTYPE text; _DG_SETCOLUMNS text; _DG_MAXCOLUMNS text; BEGIN _TABLE = i_table; IF _TABLE = '' THEN _TABLE = 'w_table'; END IF ; -- DEBUG EXECUTE('DROP TABLE IF EXISTS temp.debug_w_table; CREATE TABLE temp.debug_w_table AS SELECT * FROM ' || _TABLE || ';'); EXECUTE('DROP TABLE IF EXISTS temp.debug_cti_get_columns_from_indicateurs_properties; CREATE TABLE temp.debug_cti_get_columns_from_indicateurs_properties AS SELECT * FROM cti_get_columns_from_indicateurs_properties;'); _VIEWTYPE = ( SELECT COALESCE(MAX(property_value),'') FROM cti_get_columns_from_indicateurs_properties WHERE property LIKE 'IN_VIEWTYPE' ) ; _DG_SETCOLUMNS = ( SELECT COALESCE(MAX(property_value),'') FROM cti_get_columns_from_indicateurs_properties WHERE property LIKE 'DG_SETCOLUMNS' ) ; _DG_MAXCOLUMNS = ( SELECT COALESCE(array_to_string(base.cti_array_accum(item),','),'MAX(work_indicateurs[1]') FROM ( SELECT 'MAX(work_indicateurs['||i::text||'])' AS item FROM cti_get_columns_from_indicateurs_properties JOIN generate_series(1,1000) i ON (string_to_array(property_value,',,'))[i] IS NOT NULL OR i = 1 WHERE property = 'DB_COLUMNS' ORDER BY i ) subview ) ; -- Regroupement si plusieurs tables analysées EXECUTE('INSERT INTO ' || _TABLE || ' ( work_table_sequence, sort, level, oidt, labelt, textet, oid1, code1, texte1, oid2, code2, texte2, oid3, code3, texte3, oid, code, texte, other_fields, significant_data, indicateurs, work_indicateurs, indicateurs_text, q_special ) SELECT ''*'', MAX(sort), level, oidt, MAX(labelt), MAX(textet), oid1, MAX(code1), MAX(texte1), oid2, MAX(code2), MAX(texte2), oid3, MAX(code3), MAX(texte3), oid, MAX(code), MAX(texte), MAX(other_fields), MAX(significant_data), NULL AS indicateurs, ARRAY['||_DG_MAXCOLUMNS||'], indicateurs_text, ''0''::text AS q_special FROM ' || _TABLE || ' WHERE NOT (oid = -9999999 AND indicateurs[1] IS NULL AND work_indicateurs[1] IS NULL) GROUP BY level, oidt, oid1, oid2, oid3, oid, indicateurs_text ; DELETE FROM ' || _TABLE || ' WHERE work_table_sequence <> ''*'' ; ANALYSE ' || _TABLE || ' '); IF _TABLE <> 'w_table' THEN EXECUTE 'DROP VIEW IF EXISTS w_table CASCADE; CREATE TEMP VIEW w_table AS SELECT * FROM '||_TABLE; END IF ; PERFORM base.cti_execute(' UPDATE ' || _TABLE || ' w_table SET ' || itemset || ' FROM w_table w_table123 WHERE w_table123.level = w_table.level AND w_table123.oid1 = w_table.oid1 AND w_table123.oid2 = w_table.oid2 AND w_table123.oid3 = w_table.oid3 AND w_table123.oidt = -123 AND w_table.oidt <> -123 AND ('||itemwhere||') ; UPDATE ' || _TABLE || ' w_table SET ' || itemset || ' FROM w_table w_table123 WHERE w_table123.level = w_table.level AND w_table123.oid1 = -123 AND w_table.oid1 <> -123 AND w_table123.oid2 = w_table.oid2 AND w_table123.oid3 = w_table.oid3 AND w_table123.oidt = -123 AND w_table.oidt <> -123 AND ('||itemwhere||') ; UPDATE ' || _TABLE || ' w_table SET ' || itemset || ' FROM w_table w_table123 WHERE w_table123.level = w_table.level AND w_table123.oidt = w_table.oidt AND w_table123.oid2 = w_table.oid2 AND w_table123.oid3 = w_table.oid3 AND w_table123.oid1 = -123 AND w_table.oid1 <> -123 AND ('||itemwhere||') ; UPDATE ' || _TABLE || ' w_table SET ' || itemset || ' FROM w_table w_table123 WHERE w_table123.level = w_table.level AND w_table123.oidt = w_table.oidt AND w_table123.oid1 = w_table.oid1 AND w_table123.oid3 = w_table.oid3 AND w_table123.oid2 = -123 AND w_table.oid2 <> -123 AND ('||itemwhere||') ; UPDATE ' || _TABLE || ' w_table SET ' || itemset || ' FROM w_table w_table123 WHERE w_table123.level = w_table.level AND w_table123.oidt = w_table.oidt AND w_table123.oid1 = w_table.oid1 AND w_table123.oid2 = w_table.oid2 AND w_table123.oid3 = -123 AND w_table.oid3 <> -123 AND ('||itemwhere||') ; ',1) FROM ( SELECT array_to_string(base.cti_array_accum(itemset),',') AS itemset, array_to_string(base.cti_array_accum(itemwhere),' OR ') AS itemwhere FROM (SELECT 'work_indicateurs['||i||'] = CASE WHEN w_table123.work_indicateurs['||i||'] <> 0 THEN w_table123.work_indicateurs['||i||'] ELSE w_table.work_indicateurs['||i||'] END' AS itemset, 'w_table123.work_indicateurs['||i||'] <> 0' AS itemwhere FROM cti_get_columns_from_indicateurs_properties JOIN generate_series(1,1000) i ON (string_to_array(property_value,',,'))[i] IS NOT NULL OR i = 1 WHERE property = 'DB_COLUMNS' ORDER BY i ) subview ) subview ; EXECUTE(' DELETE FROM ' || _TABLE || ' w_table WHERE ( w_table.oidt = -123 OR w_table.oid1 = -123 OR w_table.oid2 = -123 OR w_table.oid2 = -123 ) ;') ; IF _DG_SETCOLUMNS <> '' THEN EXECUTE ' DROP TABLE IF EXISTS w_tablet ; CREATE TEMP TABLE w_tablet AS SELECT MAX(work_indicateurs) AS work_indicateurs FROM ' || _TABLE || ' w_table WHERE w_table.level = 9 AND w_table.oid = -9999999 ; UPDATE ' || _TABLE || ' w_table SET '||_DG_SETCOLUMNS||' FROM w_tablet' ; END IF; -- Si comparaison, différenes et pourcentages IF _VIEWTYPE = 'COMP' THEN EXECUTE ' UPDATE ' || _TABLE || ' SET indicateurs[009]=indicateurs[001]-indicateurs[002], indicateurs[010]=indicateurs[002]-indicateurs[003], indicateurs[011]=indicateurs[003]-indicateurs[004], indicateurs[012]=indicateurs[005]-indicateurs[006], indicateurs[013]=indicateurs[006]-indicateurs[007], indicateurs[014]=indicateurs[007]-indicateurs[008], indicateurs[015]=base.cti_division(indicateurs[001]-indicateurs[002],indicateurs[002])*100, indicateurs[016]=base.cti_division(indicateurs[002]-indicateurs[003],indicateurs[003])*100, indicateurs[017]=base.cti_division(indicateurs[003]-indicateurs[004],indicateurs[004])*100, indicateurs[018]=base.cti_division(indicateurs[005]-indicateurs[006],indicateurs[006])*100, indicateurs[019]=base.cti_division(indicateurs[006]-indicateurs[007],indicateurs[007])*100, indicateurs[020]=base.cti_division(indicateurs[007]-indicateurs[008],indicateurs[008])*100, indicateurs[029]=indicateurs[021]-indicateurs[022], indicateurs[030]=indicateurs[022]-indicateurs[023], indicateurs[031]=indicateurs[023]-indicateurs[024], indicateurs[032]=indicateurs[025]-indicateurs[026], indicateurs[033]=indicateurs[026]-indicateurs[027], indicateurs[034]=indicateurs[027]-indicateurs[028], indicateurs[035]=base.cti_division(indicateurs[021]-indicateurs[022],indicateurs[022])*100, indicateurs[036]=base.cti_division(indicateurs[022]-indicateurs[023],indicateurs[023])*100, indicateurs[037]=base.cti_division(indicateurs[023]-indicateurs[024],indicateurs[024])*100, indicateurs[038]=base.cti_division(indicateurs[025]-indicateurs[026],indicateurs[026])*100, indicateurs[039]=base.cti_division(indicateurs[026]-indicateurs[027],indicateurs[027])*100, indicateurs[040]=base.cti_division(indicateurs[027]-indicateurs[028],indicateurs[028])*100, indicateurs[049]=indicateurs[041]-indicateurs[042], indicateurs[050]=indicateurs[042]-indicateurs[043], indicateurs[051]=indicateurs[043]-indicateurs[044], indicateurs[052]=indicateurs[045]-indicateurs[046], indicateurs[053]=indicateurs[046]-indicateurs[047], indicateurs[054]=indicateurs[047]-indicateurs[048], indicateurs[055]=base.cti_division(indicateurs[041]-indicateurs[042],indicateurs[042])*100, indicateurs[056]=base.cti_division(indicateurs[042]-indicateurs[043],indicateurs[043])*100, indicateurs[057]=base.cti_division(indicateurs[043]-indicateurs[044],indicateurs[044])*100, indicateurs[058]=base.cti_division(indicateurs[045]-indicateurs[046],indicateurs[046])*100, indicateurs[059]=base.cti_division(indicateurs[046]-indicateurs[047],indicateurs[047])*100, indicateurs[060]=base.cti_division(indicateurs[047]-indicateurs[048],indicateurs[048])*100, indicateurs[069]=indicateurs[061]-indicateurs[062], indicateurs[070]=indicateurs[062]-indicateurs[063], indicateurs[071]=indicateurs[063]-indicateurs[064], indicateurs[072]=indicateurs[065]-indicateurs[066], indicateurs[073]=indicateurs[066]-indicateurs[067], indicateurs[074]=indicateurs[067]-indicateurs[068], indicateurs[075]=base.cti_division(indicateurs[061]-indicateurs[062],indicateurs[062])*100, indicateurs[076]=base.cti_division(indicateurs[062]-indicateurs[063],indicateurs[063])*100, indicateurs[077]=base.cti_division(indicateurs[063]-indicateurs[064],indicateurs[064])*100, indicateurs[078]=base.cti_division(indicateurs[065]-indicateurs[066],indicateurs[066])*100, indicateurs[079]=base.cti_division(indicateurs[066]-indicateurs[067],indicateurs[067])*100, indicateurs[080]=base.cti_division(indicateurs[067]-indicateurs[068],indicateurs[068])*100, indicateurs[089]=indicateurs[081]-indicateurs[082], indicateurs[090]=indicateurs[082]-indicateurs[083], indicateurs[091]=indicateurs[083]-indicateurs[084], indicateurs[092]=indicateurs[085]-indicateurs[086], indicateurs[093]=indicateurs[086]-indicateurs[087], indicateurs[094]=indicateurs[087]-indicateurs[088], indicateurs[095]=base.cti_division(indicateurs[081]-indicateurs[082],indicateurs[082])*100, indicateurs[096]=base.cti_division(indicateurs[082]-indicateurs[083],indicateurs[083])*100, indicateurs[097]=base.cti_division(indicateurs[083]-indicateurs[084],indicateurs[084])*100, indicateurs[098]=base.cti_division(indicateurs[085]-indicateurs[086],indicateurs[086])*100, indicateurs[099]=base.cti_division(indicateurs[086]-indicateurs[087],indicateurs[087])*100, indicateurs[100]=base.cti_division(indicateurs[087]-indicateurs[088],indicateurs[088])*100, indicateurs[109]=indicateurs[101]-indicateurs[102], indicateurs[110]=indicateurs[102]-indicateurs[103], indicateurs[111]=indicateurs[103]-indicateurs[104], indicateurs[112]=indicateurs[105]-indicateurs[106], indicateurs[113]=indicateurs[106]-indicateurs[107], indicateurs[114]=indicateurs[107]-indicateurs[108], indicateurs[115]=base.cti_division(indicateurs[101]-indicateurs[102],indicateurs[102])*100, indicateurs[116]=base.cti_division(indicateurs[102]-indicateurs[103],indicateurs[103])*100, indicateurs[117]=base.cti_division(indicateurs[103]-indicateurs[104],indicateurs[104])*100, indicateurs[118]=base.cti_division(indicateurs[105]-indicateurs[106],indicateurs[106])*100, indicateurs[119]=base.cti_division(indicateurs[106]-indicateurs[107],indicateurs[107])*100, indicateurs[120]=base.cti_division(indicateurs[107]-indicateurs[108],indicateurs[108])*100, indicateurs[129]=indicateurs[121]-indicateurs[122], indicateurs[130]=indicateurs[122]-indicateurs[123], indicateurs[131]=indicateurs[123]-indicateurs[124], indicateurs[132]=indicateurs[125]-indicateurs[126], indicateurs[133]=indicateurs[126]-indicateurs[127], indicateurs[134]=indicateurs[127]-indicateurs[128], indicateurs[135]=base.cti_division(indicateurs[121]-indicateurs[122],indicateurs[122])*100, indicateurs[136]=base.cti_division(indicateurs[122]-indicateurs[123],indicateurs[123])*100, indicateurs[137]=base.cti_division(indicateurs[123]-indicateurs[124],indicateurs[124])*100, indicateurs[138]=base.cti_division(indicateurs[125]-indicateurs[126],indicateurs[126])*100, indicateurs[139]=base.cti_division(indicateurs[126]-indicateurs[127],indicateurs[127])*100, indicateurs[140]=base.cti_division(indicateurs[127]-indicateurs[128],indicateurs[128])*100, indicateurs[149]=indicateurs[141]-indicateurs[142], indicateurs[150]=indicateurs[142]-indicateurs[143], indicateurs[151]=indicateurs[143]-indicateurs[144], indicateurs[152]=indicateurs[145]-indicateurs[146], indicateurs[153]=indicateurs[146]-indicateurs[147], indicateurs[154]=indicateurs[147]-indicateurs[148], indicateurs[155]=base.cti_division(indicateurs[141]-indicateurs[142],indicateurs[142])*100, indicateurs[156]=base.cti_division(indicateurs[142]-indicateurs[143],indicateurs[143])*100, indicateurs[157]=base.cti_division(indicateurs[143]-indicateurs[144],indicateurs[144])*100, indicateurs[158]=base.cti_division(indicateurs[145]-indicateurs[146],indicateurs[146])*100, indicateurs[159]=base.cti_division(indicateurs[146]-indicateurs[147],indicateurs[147])*100, indicateurs[160]=base.cti_division(indicateurs[147]-indicateurs[148],indicateurs[148])*100, indicateurs[169]=indicateurs[161]-indicateurs[162], indicateurs[170]=indicateurs[162]-indicateurs[163], indicateurs[171]=indicateurs[163]-indicateurs[164], indicateurs[172]=indicateurs[165]-indicateurs[166], indicateurs[173]=indicateurs[166]-indicateurs[167], indicateurs[174]=indicateurs[167]-indicateurs[168], indicateurs[175]=base.cti_division(indicateurs[161]-indicateurs[162],indicateurs[162])*100, indicateurs[176]=base.cti_division(indicateurs[162]-indicateurs[163],indicateurs[163])*100, indicateurs[177]=base.cti_division(indicateurs[163]-indicateurs[164],indicateurs[164])*100, indicateurs[178]=base.cti_division(indicateurs[165]-indicateurs[166],indicateurs[166])*100, indicateurs[179]=base.cti_division(indicateurs[166]-indicateurs[167],indicateurs[167])*100, indicateurs[180]=base.cti_division(indicateurs[167]-indicateurs[168],indicateurs[168])*100, indicateurs[189]=indicateurs[181]-indicateurs[182], indicateurs[190]=indicateurs[182]-indicateurs[183], indicateurs[191]=indicateurs[183]-indicateurs[184], indicateurs[192]=indicateurs[185]-indicateurs[186], indicateurs[193]=indicateurs[186]-indicateurs[187], indicateurs[194]=indicateurs[187]-indicateurs[188], indicateurs[195]=base.cti_division(indicateurs[181]-indicateurs[182],indicateurs[182])*100, indicateurs[196]=base.cti_division(indicateurs[182]-indicateurs[183],indicateurs[183])*100, indicateurs[197]=base.cti_division(indicateurs[183]-indicateurs[184],indicateurs[184])*100, indicateurs[198]=base.cti_division(indicateurs[185]-indicateurs[186],indicateurs[186])*100, indicateurs[199]=base.cti_division(indicateurs[186]-indicateurs[187],indicateurs[187])*100, indicateurs[200]=base.cti_division(indicateurs[187]-indicateurs[188],indicateurs[188])*100, indicateurs[209]=indicateurs[201]-indicateurs[202], indicateurs[210]=indicateurs[202]-indicateurs[203], indicateurs[211]=indicateurs[203]-indicateurs[204], indicateurs[212]=indicateurs[205]-indicateurs[206], indicateurs[213]=indicateurs[206]-indicateurs[207], indicateurs[214]=indicateurs[207]-indicateurs[208], indicateurs[215]=base.cti_division(indicateurs[201]-indicateurs[202],indicateurs[202])*100, indicateurs[216]=base.cti_division(indicateurs[202]-indicateurs[203],indicateurs[203])*100, indicateurs[217]=base.cti_division(indicateurs[203]-indicateurs[204],indicateurs[204])*100, indicateurs[218]=base.cti_division(indicateurs[205]-indicateurs[206],indicateurs[206])*100, indicateurs[219]=base.cti_division(indicateurs[206]-indicateurs[207],indicateurs[207])*100, indicateurs[220]=base.cti_division(indicateurs[207]-indicateurs[208],indicateurs[208])*100, indicateurs[229]=indicateurs[221]-indicateurs[222], indicateurs[230]=indicateurs[222]-indicateurs[223], indicateurs[231]=indicateurs[223]-indicateurs[224], indicateurs[232]=indicateurs[225]-indicateurs[226], indicateurs[233]=indicateurs[226]-indicateurs[227], indicateurs[234]=indicateurs[227]-indicateurs[228], indicateurs[235]=base.cti_division(indicateurs[221]-indicateurs[222],indicateurs[222])*100, indicateurs[236]=base.cti_division(indicateurs[222]-indicateurs[223],indicateurs[223])*100, indicateurs[237]=base.cti_division(indicateurs[223]-indicateurs[224],indicateurs[224])*100, indicateurs[238]=base.cti_division(indicateurs[225]-indicateurs[226],indicateurs[226])*100, indicateurs[239]=base.cti_division(indicateurs[226]-indicateurs[227],indicateurs[227])*100, indicateurs[240]=base.cti_division(indicateurs[227]-indicateurs[228],indicateurs[228])*100, indicateurs[249]=indicateurs[241]-indicateurs[242], indicateurs[250]=indicateurs[242]-indicateurs[243], indicateurs[251]=indicateurs[243]-indicateurs[244], indicateurs[252]=indicateurs[245]-indicateurs[246], indicateurs[253]=indicateurs[246]-indicateurs[247], indicateurs[254]=indicateurs[247]-indicateurs[248], indicateurs[255]=base.cti_division(indicateurs[241]-indicateurs[242],indicateurs[242])*100, indicateurs[256]=base.cti_division(indicateurs[242]-indicateurs[243],indicateurs[243])*100, indicateurs[257]=base.cti_division(indicateurs[243]-indicateurs[244],indicateurs[244])*100, indicateurs[258]=base.cti_division(indicateurs[245]-indicateurs[246],indicateurs[246])*100, indicateurs[259]=base.cti_division(indicateurs[246]-indicateurs[247],indicateurs[247])*100, indicateurs[260]=base.cti_division(indicateurs[247]-indicateurs[248],indicateurs[248])*100, indicateurs[269]=indicateurs[261]-indicateurs[262], indicateurs[270]=indicateurs[262]-indicateurs[263], indicateurs[271]=indicateurs[263]-indicateurs[264], indicateurs[272]=indicateurs[265]-indicateurs[266], indicateurs[273]=indicateurs[266]-indicateurs[267], indicateurs[274]=indicateurs[267]-indicateurs[268], indicateurs[275]=base.cti_division(indicateurs[261]-indicateurs[262],indicateurs[262])*100, indicateurs[276]=base.cti_division(indicateurs[262]-indicateurs[263],indicateurs[263])*100, indicateurs[277]=base.cti_division(indicateurs[263]-indicateurs[264],indicateurs[264])*100, indicateurs[278]=base.cti_division(indicateurs[265]-indicateurs[266],indicateurs[266])*100, indicateurs[279]=base.cti_division(indicateurs[266]-indicateurs[267],indicateurs[267])*100, indicateurs[280]=base.cti_division(indicateurs[267]-indicateurs[268],indicateurs[268])*100, indicateurs[289]=indicateurs[281]-indicateurs[282], indicateurs[290]=indicateurs[282]-indicateurs[283], indicateurs[291]=indicateurs[283]-indicateurs[284], indicateurs[292]=indicateurs[285]-indicateurs[286], indicateurs[293]=indicateurs[286]-indicateurs[287], indicateurs[294]=indicateurs[287]-indicateurs[288], indicateurs[295]=base.cti_division(indicateurs[281]-indicateurs[282],indicateurs[282])*100, indicateurs[296]=base.cti_division(indicateurs[282]-indicateurs[283],indicateurs[283])*100, indicateurs[297]=base.cti_division(indicateurs[283]-indicateurs[284],indicateurs[284])*100, indicateurs[298]=base.cti_division(indicateurs[285]-indicateurs[286],indicateurs[286])*100, indicateurs[299]=base.cti_division(indicateurs[286]-indicateurs[287],indicateurs[287])*100, indicateurs[300]=base.cti_division(indicateurs[287]-indicateurs[288],indicateurs[288])*100 ' ; END IF; -- Si evolution comparative, transformation des colonnes en lignes d'indicateurs IF _VIEWTYPE = 'EVOLCOMP' THEN EXECUTE(' DROP TABLE IF EXISTS w_evolcomp_indicateurs ; CREATE TEMP TABLE w_evolcomp_indicateurs AS SELECT property, property_value, substr(property,9,3)::integer AS indicateur_num, (substr(property,9,3)::integer-1)*20 AS indicateur_index FROM cti_get_columns_from_indicateurs_properties WHERE property LIKE ''DG\_LHEAD%'' ; UPDATE w_table SET level = 2, oidt = oid2, textet = texte2, labelt = texte2, oid1 = oid2, code1 = code2, texte1 = texte2, oid2 = oid1, code2 = code1, texte2 = texte1, oid3 = oid1, code3 = code1, texte3 = texte1 , oid = oid1, code = code1, texte = texte1 ; DROP TABLE IF EXISTS w_table_evolcomp ; CREATE TEMP TABLE w_table_evolcomp AS SELECT w_table.work_table_sequence, 0::bigint AS sort, w_table.level, CASE WHEN w_table.oidt = -9999999 THEN 1 ELSE w_table.oidt END AS oidt, CASE WHEN w_table.oidt = -9999999 THEN '' Synthèse'' ELSE w_table.labelt END AS labelt, CASE WHEN w_table.oidt = -9999999 THEN ''Synthèse'' ELSE w_table.textet END, w_table.oid1 , w_table.code1, w_table.texte1, indicateur_num AS oid2 , to_char(indicateur_num,''FM000'') AS code2, property_value AS texte2, w_table.oid3, w_table.code3, w_table.texte3, w_table.oid , w_table.code, w_table.texte, w_table.other_fields, w_table.significant_data, CASE WHEN w_table.level = 2 THEN Array[ indicateurs[indicateur_index+01], indicateurs[indicateur_index+02], indicateurs[indicateur_index+03], indicateurs[indicateur_index+04], indicateurs[indicateur_index+05], indicateurs[indicateur_index+06], indicateurs[indicateur_index+07], indicateurs[indicateur_index+08], indicateurs[indicateur_index+09], indicateurs[indicateur_index+10], indicateurs[indicateur_index+11], indicateurs[indicateur_index+12], indicateurs[indicateur_index+13], indicateurs[indicateur_index+14], indicateurs[indicateur_index+15], indicateurs[indicateur_index+16], indicateurs[indicateur_index+17], indicateurs[indicateur_index+18], indicateurs[indicateur_index+19], indicateurs[indicateur_index+20] ] ELSE NULL END AS indicateurs, w_table.work_indicateurs, w_table.indicateurs_text, w_table.q_special FROM w_table JOIN w_evolcomp_indicateurs ON 1=1 WHERE w_table.oid <> -9999999 ; DROP TABLE IF EXISTS w_table_evolcomp_compare ; CREATE TEMP TABLE w_table_evolcomp_compare AS SELECT row_number() OVER (PARTITION BY oidt, oid1, oid2 ORDER BY code) AS n, oidt||''-''||oid1||''-''||oid2 AS indicateur_code, NULL::numeric[] AS indicateurs_p, ''''::text AS code_p, * FROM w_table_evolcomp WHERE level = 2 ; UPDATE w_table_evolcomp_compare SET code_p = w_table_evolcomp_compare_p.code, indicateurs_p = ARRAY[ w_table_evolcomp_compare_p.indicateurs[01], w_table_evolcomp_compare_p.indicateurs[02], w_table_evolcomp_compare_p.indicateurs[03], w_table_evolcomp_compare_p.indicateurs[04], w_table_evolcomp_compare_p.indicateurs[05], w_table_evolcomp_compare_p.indicateurs[06], w_table_evolcomp_compare_p.indicateurs[07], w_table_evolcomp_compare_p.indicateurs[08], w_table_evolcomp_compare_p.indicateurs[09], w_table_evolcomp_compare_p.indicateurs[10], w_table_evolcomp_compare_p.indicateurs[11], w_table_evolcomp_compare_p.indicateurs[12], w_table_evolcomp_compare_p.indicateurs[13], w_table_evolcomp_compare_p.indicateurs[14], w_table_evolcomp_compare_p.indicateurs[15], w_table_evolcomp_compare_p.indicateurs[16], w_table_evolcomp_compare_p.indicateurs[17], w_table_evolcomp_compare_p.indicateurs[18], w_table_evolcomp_compare_p.indicateurs[19], w_table_evolcomp_compare_p.indicateurs[20] ] FROM w_table_evolcomp_compare w_table_evolcomp_compare_p WHERE w_table_evolcomp_compare.indicateur_code = w_table_evolcomp_compare_p.indicateur_code AND w_table_evolcomp_compare.n = w_table_evolcomp_compare_p.n+1 ; INSERT INTO w_table_evolcomp SELECT work_table_sequence, 0::bigint AS sort, level, oidt, labelt, textet, oid1, code1, texte1, oid2, code2, texte2, oid3, code3 || ''E'', texte3, oid, code || ''E'', ''Evolution ''||code||''-''||code_p, other_fields, significant_data, CASE WHEN level = 2 THEN Array[ indicateurs[01]-indicateurs_p[01], indicateurs[02]-indicateurs_p[02], indicateurs[03]-indicateurs_p[03], indicateurs[04]-indicateurs_p[04], indicateurs[05]-indicateurs_p[05], indicateurs[06]-indicateurs_p[06], indicateurs[07]-indicateurs_p[07], indicateurs[08]-indicateurs_p[08], indicateurs[09]-indicateurs_p[09], indicateurs[10]-indicateurs_p[10], indicateurs[11]-indicateurs_p[11], indicateurs[12]-indicateurs_p[12], indicateurs[13]-indicateurs_p[13], indicateurs[14]-indicateurs_p[14], indicateurs[15]-indicateurs_p[15], indicateurs[16]-indicateurs_p[16], indicateurs[17]-indicateurs_p[17], indicateurs[18]-indicateurs_p[18], indicateurs[19]-indicateurs_p[19], indicateurs[20]-indicateurs_p[20] ] ELSE NULL END AS indicateurs, work_indicateurs, indicateurs_text, q_special FROM w_table_evolcomp_compare WHERE n > 1 ; INSERT INTO w_table_evolcomp SELECT work_table_sequence, 0::bigint AS sort, level, oidt, labelt, textet, oid1, code1, texte1, oid2, code2, texte2, oid3, code3 || ''P'', texte3, oid, code || ''P'', ''% Evolution ''||code||''-''||code_p, other_fields, significant_data, CASE WHEN level = 2 THEN Array[ base.cti_division(indicateurs[01]-indicateurs_p[01],indicateurs_p[01])*100, base.cti_division(indicateurs[02]-indicateurs_p[02],indicateurs_p[02])*100, base.cti_division(indicateurs[03]-indicateurs_p[03],indicateurs_p[03])*100, base.cti_division(indicateurs[04]-indicateurs_p[04],indicateurs_p[04])*100, base.cti_division(indicateurs[05]-indicateurs_p[05],indicateurs_p[05])*100, base.cti_division(indicateurs[06]-indicateurs_p[06],indicateurs_p[06])*100, base.cti_division(indicateurs[07]-indicateurs_p[07],indicateurs_p[07])*100, base.cti_division(indicateurs[08]-indicateurs_p[08],indicateurs_p[08])*100, base.cti_division(indicateurs[09]-indicateurs_p[09],indicateurs_p[09])*100, base.cti_division(indicateurs[10]-indicateurs_p[10],indicateurs_p[10])*100, base.cti_division(indicateurs[11]-indicateurs_p[11],indicateurs_p[11])*100, base.cti_division(indicateurs[12]-indicateurs_p[12],indicateurs_p[12])*100, base.cti_division(indicateurs[13]-indicateurs_p[13],indicateurs_p[13])*100, base.cti_division(indicateurs[14]-indicateurs_p[14],indicateurs_p[14])*100, base.cti_division(indicateurs[15]-indicateurs_p[15],indicateurs_p[15])*100, base.cti_division(indicateurs[16]-indicateurs_p[16],indicateurs_p[16])*100, base.cti_division(indicateurs[17]-indicateurs_p[17],indicateurs_p[17])*100, base.cti_division(indicateurs[18]-indicateurs_p[18],indicateurs_p[18])*100, base.cti_division(indicateurs[19]-indicateurs_p[19],indicateurs_p[19])*100, base.cti_division(indicateurs[20]-indicateurs_p[20],indicateurs_p[20])*100 ] ELSE NULL END AS indicateurs, work_indicateurs, indicateurs_text, q_special FROM w_table_evolcomp_compare WHERE n > 1 ; INSERT INTO w_table_evolcomp SELECT work_table_sequence, 0::bigint AS sort, 1 AS level, oidt, labelt, textet, oid1 , code1, texte1, oid2 , code2, texte2, -9999999 , chr(1), '''', oid2 AS oid , code2 AS code, texte2 AS texte, NULL, NULL, NULL AS indicateurs, NULL AS work_indicateurs, NULL AS indicateurs_text, ''0'' AS q_special FROM w_table_evolcomp GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12 ; TRUNCATE w_table ; INSERT INTO w_table SELECT * FROM w_table_evolcomp '); END IF; UPDATE w_table SET absolute_sum = (SELECT SUM(ABS(s)) FROM UNNEST(indicateurs) s) ; RETURN 'OK'; END;