You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

705 lines
29 KiB

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;