Regrouper plusieurs lignes d'une seule table avec un ID commun

Regrouper plusieurs lignes d'une seule table avec un ID commun - SQL/NoSQL - Programmation

Marsh Posté le 22-07-2019 à 17:18:39    

Bonjour à la communauté,
 
A force d'écumer le web je me suis mis un gros mal de tête mais n'arrive toujours pas à résoudre mon problème. Aussi j'en appelle à vos expériences (et au sein gourou du SQL) pour résoudre ceci (qui je suis sûr en fera rire bon nombre^^) :
 
J'ai une table de ce type :
____________________________
ID|POS|VAL|
---------------------------------------
1 |a|1,5
1 |b|2,5
1 |c|0
2 |a|1,4
2 |b|2,3
___________________________
 
 
et j'aimerais via une requête obtenir ceci :
_______________________________
ID|POS1|VAL1|POS2|VAL2|POS3|VAL3
-------------------------------------------
1 |a|1,5|b|2,5|c|0
2 |a|1,4|b|2,3|null|null
_______________________________
 
En complément il s'agit d'une base PostgreSQL
 
J'ai par ailleurs un champs de géométrie associé à ID qui devrait faire partie du regroupement, cela posera t-il souci svp ?  
 
En vous remerciant pour votre temps de lecture et encore plus pour vos éventuelles réponses.  
 
Bonnes vacances à ceux qui le sont déjà et bon courage aux autres :p

Reply

Marsh Posté le 22-07-2019 à 17:18:39   

Reply

Marsh Posté le 22-07-2019 à 18:05:44    

Je connais pas bien PostgreSQL mais quelque chose comme ca :
http://sqlfiddle.com/#!17/7495a/7

Code :
  1. CREATE TABLE test (
  2.     ID SERIAL,
  3.     POS varchar(1),
  4.     VAL varchar(3)
  5. );
  6. INSERT INTO test(ID, POS, VAL) VALUES
  7. (1,'a','1,5'),
  8. (1,'b','2,5'),
  9. (1,'c','0'),
  10. (2,'a','1,4'),
  11. (2,'b','2,3');
  12. SELECT s.ID, a.POS as POS1, a.VAL as POS1, b.POS as POS2, b.VAL as POS2, c.POS as POS3, c.VAL as POS3
  13. FROM test s
  14. LEFT JOIN test a ON a.ID = s.ID AND a.POS = 'a'
  15. LEFT JOIN test b ON b.ID = s.ID AND b.POS = 'b'
  16. LEFT JOIN test c ON c.ID = s.ID AND c.POS = 'c'
  17. GROUP BY s.ID, a.POS, a.VAL, b.POS, b.VAL, c.POS, c.VAL
  18. ORDER BY s.ID


---------------
D3
Reply

Marsh Posté le 22-07-2019 à 18:20:43    

mechkurt a écrit :

Je connais pas bien PostgreSQL mais quelque chose comme ca :
http://sqlfiddle.com/#!17/7495a/7

Code :
  1. CREATE TABLE test (
  2.     ID SERIAL,
  3.     POS varchar(1),
  4.     VAL varchar(3)
  5. );
  6. INSERT INTO test(ID, POS, VAL) VALUES
  7. (1,'a','1,5'),
  8. (1,'b','2,5'),
  9. (1,'c','0'),
  10. (2,'a','1,4'),
  11. (2,'b','2,3');
  12. SELECT s.ID, a.POS as POS1, a.VAL as POS1, b.POS as POS2, b.VAL as POS2, c.POS as POS3, c.VAL as POS3
  13. FROM test s
  14. LEFT JOIN test a ON a.ID = s.ID AND a.POS = 'a'
  15. LEFT JOIN test b ON b.ID = s.ID AND b.POS = 'b'
  16. LEFT JOIN test c ON c.ID = s.ID AND c.POS = 'c'
  17. GROUP BY s.ID, a.POS, a.VAL, b.POS, b.VAL, c.POS, c.VAL
  18. ORDER BY s.ID



 
 
Merci d'après mes premiers test cela fonctionne, reste à faire cela sur toutes mes autres valeurs :) Excellente fin de journée !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed