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 15/09/2021 15:27:47

Rizcola62
Membre

résultat requête vers noms de colonnes

Bonjour ,
Je souhaite réaliser la fonction suivante:
table 1           table 2         
ctxt|biotypo    esp|b1|b2.5|b3
1| b1              AA|1|null|1
2| b2.5           AB|4|2|null
3| b3              AC|null|null|3


Résultat attendu:
ctxt|esp|bio
1|AA|1
1|AB|4     
2|AB|2     
3|AA|1
3|AC|3
L'idée du coup serait de passer en variable le résultat de la requête de la tab 1 afin de sélectionner la colonne adéquate.
Avez vous des pistes?

Hors ligne

#2 15/09/2021 17:48:15

gleu
Administrateur

Re : résultat requête vers noms de colonnes

Vous ne pourrez pas avec une simple requête SQL. Il vous faut soit un programme externe soit une fonction stockée.


Guillaume.

Hors ligne

#3 15/09/2021 19:32:52

Rizcola62
Membre

Re : résultat requête vers noms de colonnes

gleu a écrit :

Vous ne pourrez pas avec une simple requête SQL. Il vous faut soit un programme externe soit une fonction stockée.

ok pour la fonction mais avez vous une idée de la forme qu'elle doit prendre?

Hors ligne

#4 16/09/2021 03:48:42

rjuju
Administrateur

Re : résultat requête vers noms de colonnes

Il manque des informations sur ce que vous cherchez à faire exactement.  Si vous voulez faire une requête spécifique sur des tables dont la structure est fixe (et donc modifier la requête en cas de changement de schéma), cela reste possible en sql.  Par exemple:


select tab1.ctxt, tab2.esp,
    case
        when tab1.biotypo = 'b1' then tab2.b1
        when tab1.biotypo = 'b2.5' then tab2."b2.5"
        when tab1.biotypo = 'b3' then tab2.b3
    end as bio
from tab1
join tab2 on
    case
        when tab1.biotypo = 'b1' then tab2.b1 is not null
        when tab1.biotypo = 'b2.5' then tab2."b2.5" is not null
        when tab1.biotypo = 'b3' then tab2.b3 is not null
    end;

Veuillez noter que cette requête ne s'assure absolument pas que les données dans tab1 sont valides, et retournerait donc un peu n'importe quoi dans le cas où tab1.biotypo est invalide.  C'est quelque chos que vous auriez à corriger, l'idée étant de simplement donner une approche qui pourrait marcher.


Veuillez noter également que les performances risquent d'être désastreuses dans le cas où beaucoup de données doivent être retournées.  Vous pourriez probablement avoir de meilleures performances avec une approche à base de UNION ALL, avec une requête par "biotypo", mais en contrepartie vous auriez de mauvaise performance dans le cas où une clause WHERE excluerait la majorité des enregistrements.


Tous ces problèmes sont dû au format de stockage de vos données.

Hors ligne

#5 16/09/2021 17:12:58

Rizcola62
Membre

Re : résultat requête vers noms de colonnes

oui finalement autant reformater les tables.
merci en tout cas

Hors ligne

Pied de page des forums