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;