SQL-Abfrage

juergen1

Benutzer
Beiträge
8
Hallo,
Habe eine Tabelle mit folgendem Aufbau:

s1 s2 s3

c a 1

c b 2

d a 3

d b 4


Das Ergebnis der SQL-Abfrage soll so aussehen:



a b

c 1 2

d 3 4


Wie muss die SQL-Abfrage aussehen?
 
Zuletzt bearbeitet:
Werbung:
für Dich mache ich das Umnögliche möglich:

Code:
test=*# select * from juergen1 ;
 s1 | s2 | s3
----+----+----
 c  | a  | 1
 c  | b  | 2
 d  | a  | 3
 d  | b  | 4
(4 rows)

test=*# select  s1 as a, min(s3) as b, max (s3) as " " from juergen1 group by s1 order by a;
 a | b |   
---+---+---
 c | 1 | 2
 d | 3 | 4
(2 rows)

test=*#

Allerdings sind die Spaltennnamen hier fest verdrahtet. Wenn das dynamisch sein soll, wirst Du Dir dynamisch ein SQL basten und ausführen müssen. Hier eine Anleitung:
PostgreSQL: Documentation: 12: 42.5. Basic Statements
 
dann halt so:

Code:
test=*# select  s1 as " ", min(s3) as a, max (s3) as b from juergen1 group by s1 order by a;
   | a | b
---+---+---
 c | 1 | 2
 d | 3 | 4
(2 rows)

Die oben genannten Nachteile und deren mögliche Lösung bleibt davon unberührt.
 
Werbung:
Bei meiner geplanten Anwendung reichen wenige Spalten aus, sodass ich die Abfrage noch mal überarbeitet habe. Zur Lösung habe ich mal auf Unterabfragen gesetzt.

Hier meine Lösung:


SELECT t1.s1 AS ' ', t1.s3 AS a, t2.s3 AS b
FROM (SELECT t1.s1,t2.s3
FROM (SELECT s1 FROM t1 GROUP BY s1) AS t1
LEFT JOIN (SELECT s1,s3 FROM t1 WHERE t1.s2 = 'a') AS t2
ON t1.s1 = t2.s1) AS t1
LEFT JOIN (SELECT s1,s3 FROM t1 WHERE t1.s2 = 'b') AS t2
ON t1.s1 = t2.s1;
 
Zurück
Oben