Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 29/04/2020 14:18:54
- Abdel
- Membre
Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
Bonjour à tous,
Je veux transformer mon tableau simple en tableau croisé dynamique, mais en remplissant les valeurs par du txt et non par une valeur numérique.
j'ai utilisé cette commande : SELECT
idlocal,
(CASE WHEN ntile = 1 THEN ddenom END) "Nom proprietaire 1",
(CASE WHEN ntile = 2 THEN ddenom END) "Nom proprietaire 2",
(CASE WHEN ntile = 3 THEN ddenom END) "Nom proprietaire 3",
(CASE WHEN ntile = 4 THEN ddenom END) "Nom proprietaire 4",
(CASE WHEN ntile = 5 THEN ddenom END) "Nom proprietaire 5",
(CASE WHEN ntile = 6 THEN ddenom END) "Nom proprietaire 6"
FROM analyse_complete_test
mais j'arrive pas à regrouper mes résultats même en passant par un "group by.". y'a t'il une solution s'il vous plait ?
Hors ligne
#2 29/04/2020 15:01:54
- rjuju
- Administrateur
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
Quelle est l'erreur exacte ?
Julien.
https://rjuju.github.io/
Hors ligne
#3 29/04/2020 15:07:24
- Abdel
- Membre
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
Au fait je n'ai pas d'erreur, mais j'obtiens pas le résultat souhaité. le résultat de la commande fait que si par exemple un local possède 3 propriétaires, il va dupliquer les lignes 3 fois alors que je veux obtenir qu'une seule ligne.
Hors ligne
#4 29/04/2020 15:41:47
- rjuju
- Administrateur
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
C'est justement le principe du GROUP BY. Si vous pouvez avoir 3 propriétaires et que dans ce cas vous ne voulez qu'une ligne c'est que par définition il ne faut pas regrouper par propriétaire mais par autre chose, et là comme il s'agit de vos données vous seul pouvez savoir quel critère de regroupement choisir à priori.
Julien.
https://rjuju.github.io/
Hors ligne
#5 29/04/2020 16:05:13
- Abdel
- Membre
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
j'ai déjà grouper local "Group by" et ça fonctionne pas.
Voici mon code : SELECT
idlocal,
(CASE WHEN ntile = 1 THEN ddenom END) "Nom proprietaire 1",
(CASE WHEN ntile = 2 THEN ddenom END) "Nom proprietaire 2",
(CASE WHEN ntile = 3 THEN ddenom END) "Nom proprietaire 3",
(CASE WHEN ntile = 4 THEN ddenom END) "Nom proprietaire 4",
(CASE WHEN ntile = 5 THEN ddenom END) "Nom proprietaire 5",
(CASE WHEN ntile = 6 THEN ddenom END) "Nom proprietaire 6"
FROM analyse_complete_test
group by idlocal,ntile,ddenom
Le SGBD me force à grouper même par ntile et ddenom
ntile : c'est le nombre de colonne pour chaque propriétaire.
Hors ligne
#6 30/04/2020 13:31:20
- dverite
- Membre
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
Le résultat voulu est un idlocal dans la colonne de gauche, sans répétition d'une ligne à l'autre, et sur chaque ligne à droite de idlocal 6 colonnes avec les propriétaires correspondants.
Pour ça il faut grouper uniquement par idlocal et utiliser une fonction d'aggrégat pour générer les résultats des 6 colonnes.
C'est ça qui n'est pas intuitivement évident dans les requêtes qui font des tableaux croisés. Bien que logiquement il y ait un seul "ddenom" possible pour un couple (idlocal, ntile) donné, le moteur SQL n'en sait rien. La solution est d'utiliser un aggrégat comme MAX(ddenom). Le max d'une liste d'une seule valeur étant cette valeur, ça convient très bien.
Dans l'idée ce modèle de requête doit marcher (voir la version éditée avec FILTER)
SELECT
idlocal,
max(ddenom) FILTER (where ntile = 1) "Nom proprietaire 1",
max(ddenom) FILTER (where ntile = 2) "Nom proprietaire 2",
... etc pour les autres valeurs...
FROM analyse_complete_test
GROUP BY idlocal;
Dernière modification par dverite (30/04/2020 13:43:51)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
#7 30/04/2020 13:53:34
- Abdel
- Membre
Re : Création d'un tableau analyse croisée avec des valeurs de type "TEXT"
Merci pour votre réponse.
je viens de tester et ça fonctionne.
Merci @dverite pour votre contribution.
Hors ligne