Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQL-Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von juergen1, 6 August 2020.

  1. juergen1

    juergen1 Benutzer

    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: 6 August 2020
  2. akretschmer

    akretschmer Datenbank-Guru

    wie kommst Du auf das Ergebniss?
     
  3. juergen1

    juergen1 Benutzer

    Die Reihen sind dem Inhalt von Spalte s1 bezeichnet und
    die Spalten nach dem Inhalt von Spalte s2. (siehe oben)
     
  4. akretschmer

    akretschmer Datenbank-Guru

    das sind dann 2 Spalten a und b, Deine Zeilen haben aber, Moment, ich zähl nach, 3.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    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
     
  6. juergen1

    juergen1 Benutzer

    Die Reihen sind dem Inhalt von Spalte s1 bezeichnet und

    die Spalten nach dem Inhalt von Spalte s2. (siehe oben)
     
  7. juergen1

    juergen1 Benutzer

    Danke, das hilft mir weiter.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  9. juergen1

    juergen1 Benutzer

    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;
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden