Vous n'êtes pas identifié(e).
Pages : 1
Hello ,
Finalement , J'ai trouvé la solution :
CREATE OR REPLACE FUNCTION UPDATE_KPI03() RETURNS BOOLEAN
LANGUAGE PLPGSQL
AS
$$
DECLARE
TABLE_RECORD RECORD;
CALC_BP_YEAR VARCHAR;
CALC_KPI_03 NUMERIC;
BEGIN
FOR TABLE_RECORD IN SELECT BP_YEAR ,KPI_02,KPI_03 FROM VALO_IT ORDER BY BP_YEAR
LOOP
SELECT BP_YEAR ,
SUM(CASE
WHEN KPI_01 IS NULL AND KPI_02 IS NOT NULL THEN KPI_02
WHEN KPI_01 < 0 THEN KPI_02
ELSE
CASE WHEN KPI_02 < (SELECT -SUM(KPI_03) FROM VALO_IT WHERE BP_YEAR < TABLE_RECORD.BP_YEAR) THEN KPI_02
ELSE
(SELECT -SUM(KPI_03) FROM VALO_IT WHERE BP_YEAR < TABLE_RECORD.BP_YEAR)
END
END ) AS KPI_03
INTO CALC_BP_YEAR, CALC_KPI_03
FROM VALO_IT
WHERE BP_YEAR = TABLE_RECORD.BP_YEAR
GROUP BY BP_YEAR ;
UPDATE VALO_IT
SET KPI_03 = CALC_KPI_03
WHERE BP_YEAR = CALC_BP_YEAR ;
END LOOP;
RETURN TRUE;
END
$$;
SELECT UPDATE_KPI03();
Ibrahim
Bonjour ,
J'ai besoin de vos lumières concernant un besoin à implémenter en SQL sous postgresql)
- En fait il s'agit de migrer un traitement sous excel vers une routine SQL.
- Ma source de données est une table avec 3 colonnes Year , KPI_01 et KPI_02
- Ma cible est d'updater la colonne calculée KPI_03 avec la règle de calcul suivante :
Pour chaque Year
Si KPI_01 < 0 alors KPI_02
Sinon Min(KPI_02 , - Somme(Cumul KPI_03 jusqu'à Year -1)
Ci-dessous le jeux de données avec le résultat attendu.
*******************************************
YEAR KPI_01 KPI_02 KPI_03
2018 -3545235 0 -3545235
2019 -1797850 471793,95 471793,95
2020 -17955167 -4362475,59 -4362475,59
2021 -106708191 -23963316,48 -23963316,48
2022 -205647157 -26713520,82 -26713520,82
2023 -302080334 -26036957,79 -26036957,79
2024 -363951142 -16705118,16 -16705118,16
2025 -403253712 -10611693,9 -10611693,9
2026 -367437476 9670383,72 9670383,72
2027 -306559897 16436946,33 16436946,33
2028 -244404786 16781879,97 16781879,97
2029 -179627270 17489929,32 17489929,32
2030 -105133635 20113281,45 20113281,45
2031 -24311996 21821842,53 21821842,53
2032 62226500 23365393,92 9152260,47
2033 151072915 23988532,05 0
2034 247467741 26026603,02 0
2035 322009247 20126206,62 0
*******************************************
Merci beaucoup pour votre aide.
Bien Cdt,
Ibrahim
Pages : 1