Fusionner/Concatener lignes SQL [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
jeudi 5 novembre 2015
Statut
Membre
Dernière intervention
25 juillet 2016
-
 MontSouris -
Bonjour à tous,

J'aimerais pouvoir fusionner des lignes de ma requête en fonction de l'ID.

Voici ci-dessous un schéma de ma table et ce que j'aimerais avoir au final:

Ma table actuelle :
1 2 3 4 X X X
1 3 4 5 X X X
1 3 4 6 X X X

=> ce que j'aimerais avoir
1 2 3 4 5 6 X X X

J'ai essayé de faire un GROUP BY ou de concatener mais rien n'y fait.

Merci d'avance pour vos réponses!

MS

2 réponses

Messages postés
1746
Date d'inscription
samedi 25 février 2012
Statut
Membre
Dernière intervention
29 mars 2018
264
Un peu bizarre, je ne comprends pas bien ce que tu veux faire.
Un SELECT DISTINCT peut etre ?
Bonjour Danelectro,

La mise en page de ma table dans mon exemple n'a pas marché. Ci-dessous, une maquette un peu plus explicite :

______Col 1__Col 2__Col 3__Col 4__Col 5__Col 6
L1_____1____2_____3_____4____Null____Null
L2_____1____2_____3____Null_____5____Null
L3_____1____2_____3____Null___Null_____6

______Col 1__Col 2__Col 3__Col 4__Col 5__Col 6
L1_____1_____2_____3_____4_____5_____6

Quand j'effectue un left join entre mes deux tables, ma requête me retourne des doublons sur les colonnes 1, 2 et 3 et rajoute une valeur distincte pour les colonnes 4, 5 et 6 sur trois lignes.

J'aimerais pouvoir tout avoir sur la même ligne et ainsi supprimer les doublons. J'ai essayé avec un select distinct mais ça ne marche pas visiblement.

Merci d'avance pour ta réponse,

MS
Danelectro
Messages postés
1746
Date d'inscription
samedi 25 février 2012
Statut
Membre
Dernière intervention
29 mars 2018
264
Ok je vois un peu mieux. Etonnant de vouloir associer à des tuples des valeurs qui ne leur correspondent pas, mais peut-être que dans ton cas c'est justifié.

Par contre je ne comprends pas, tu as 2 tables ? Le premier tableau dessiné et le deuxième ?
En réalité, la première table est la table finale issue de trois tables différentes liées par des left join. Ces tables là sont reliées entre elles via l'ID qui correspond à la colonne 1 de la première table.

Moi, j'aimerais arriver au résultat de la table du dessous, c'est-à-dire concatener les valeurs identiques sans les dupliquer, et reprendre les valeurs distinctes sur une seule et même ligne.

Afin de fusionner les lignes en doublons mais conserver les valeurs distinctes sur la même ligne, j'utilise la fonction GROUP BY. Elle m'impose donc d'ajouter des agrégats.

Cependant, mes données sont en varchar. Calculer un max, min ou sum sur un format texte devient donc totalement illogique. A ce niveau là, ma requête plante.

As-tu une idée du problème ou comment le résoudre? J'ai cru comprendre qu'un CONVERT pourrait éventuellement m'aider mais je ne sais pas trop par où commencer.

Merci pour ton aide,

MS
Danelectro
Messages postés
1746
Date d'inscription
samedi 25 février 2012
Statut
Membre
Dernière intervention
29 mars 2018
264 > Montsouris
Ah oui c'est plus clair. Oui faut sans doute passer par un GROUP BY <id>, et un GROUP BY n'implique pas forcément d'utiliser un agrégat.

Quelques éléments de réponses ici
http://forum.hardware.fr/hfr/Programmation/SGBD-SQL/sql-regrouper-donnees-sujet_67624_1.htm

et ici
http://sql.sh/cours/group-by

Sinon tu peux gérer ça avec un curseur je pense.
Merci pour ta réponse! Ton forum m'a bien aidé. Je bascule ma demande en résolu ;)
Messages postés
223
Date d'inscription
lundi 6 juillet 2015
Statut
Membre
Dernière intervention
14 août 2018
51
tu peux peut être commencer par rechercher dans ta table si'il y y a des lignes non null au niveau de la colonne 5 et 6. Si c'est le cas inserer les valeurs du resultat dans la 1ere ligne.