Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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é...
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.
Pages : 1