PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Site PostgreSQL.fr » Transformation ligne en colonne » 18/09/2019 15:59:44

zetar
Réponses : 1

Bonjour,

Je reviens vers vous tous car je n'arrive pas à transformer une table contenant x lignes en 1 seule ligne de x colonnes.

exemple :
col1            col2           col3
2928114    ACS       <null>
2928114    ACSC      CSM
2928114    EME       IRMC
2928115    ETUDE     XDH
2928115    REQ3      INMC
2928116    PADS       CSM
2928116    ACSC      IRMC
2928116    TMUD      RMU

à transformer en :
col1,          col2a        col2b,     col2c jusque col2i     , col3a,    col3b,    col3c,      jusque col3i
2928114     ACS       ACSC     EME,                        ,         ,   CSM,     IRMC,
2928115    ETUDE     REQ3                                       XDH      INMC
2928116    PADS       ACSC     TMUD                         CSM     IRMC    RMU

Merci pour vos retours.
Cordialement.

#2 Re : Site PostgreSQL.fr » Pb Fonction avec dates » 29/08/2019 15:31:02

Re,


Merci !

Testé et approuvé... smile


create or replace function FP_DYN_DATE(varchar)
returns date as $$
select case
    when $1 = 'YESDAT' then current_date - 1
    when $1 = 'AUJDAT' then current_date
    when $1 = 'J-2DAT' then current_date - 2
    when $1 = 'DERM0'  then to_date(to_char(date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1MONTH - 1DAY', 'YYYYMMDD'), 'YYYYMMDD')
end;
$$ LANGUAGE sql IMMUTABLE;

#3 Site PostgreSQL.fr » Pb Fonction avec dates » 29/08/2019 10:50:28

zetar
Réponses : 2

Bonjour,


J'ai développé une requête sous Squirrel qui répond à mes besoins.
Cependant la transposition de celle-ci dans une fonction ne marche pas (avec ou sans cote) !

Quel doit être le type de conversions faut-il appliquer ?


create or replace function FP_DYN_DATE(varchar)
returns date as $$
select case
    when $1 = 'HIER' then current_date - 1
    when $1 = 'AUJOU' then current_date
    when $1 = 'AVTHIER' then current_date - 2
    when $1 = 'DERM0'  then (case to_char(extract(month from current_date - 1),'09')
        when extract(month from current_date - 1) in (01,03,05,07,08,10,12) then to_date(to_char(extract(year from current_date - 1),'9999') || to_char(extract(month from current_date - 1),'09') || 31, 'YYYYMMDD')
        when to_char(extract(month from current_date - 1),'09') = '02' then to_date(to_char(extract(year from current_date - 1),'9999') || to_char(extract(month from current_date - 1),'09') || 28, 'YYYYMMDD')
        when to_char(extract(month from current_date - 1),'09') in ('04','06','09','11') then to_date(to_char(extract(year from current_date - 1),'9999') || to_char(extract(month from current_date - 1),'09') || 30, 'YYYYMMDD')
        else '99' end )
end;
$$ LANGUAGE sql IMMUTABLE;


Voici le message après exécution sous pgadmin 4

ERROR:  ERREUR:  l'opérateur n'existe pas : text = boolean
LINE 15:   when extract(month from current_date - 1) in (01,03,05,07,...
           ^
HINT:  Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.


État SQL :42883
Caractère :859

Merci pour vos retours.

Pied de page des forums

Propulsé par FluxBB