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

Abfrage zu ID mit mehreren Daten

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von pauline1, 9 Januar 2020.

  1. pauline1

    pauline1 Benutzer

    Hallo, ich habe wahrscheinlich einen einfachen Problem, aber trotzdem weiß ich nicht, wie ich die Abfrage definieren soll:
    Ich habe eine Tabelle wo zu einem id mehrere Datensätze existieren. Ich habe auch Tabelle mit eindeutigen ids, die einmal vorkommen und Titel. Nun möchte ich Tab 1 zu Tab 2 Verknüpfen, aber so, damit nur ein Datensatz vorkommt und dort, wo mehr Einträge sind, trotzdem im Ergebnis kommen.
    Code:
    Tab 1:        Tab 2:
    id, key.          id          titel
    1.  a.            1           ab
    1.  b.            2           cd
    2.  a.            3           ef
    2   c
    3.  d
    3   f
    3.  v
    
    Lösunge sollte so aussehen:
    Code:
    1    a      b      null     ab
    2    a      c     null     cd
    3    d      f       v      ef
    
    
    
    Wie kann ich es verknüpfen?
    LG P
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Du hast also diese Taellen:

    Code:
    andreas@[local]:5434/test# select * from t1;
     id | key
    ----+-----
      1 | a
      1 | b
      2 | a
      2 | c
      3 | d
      3 | f
      3 | v
    (7 rows)
    
    andreas@[local]:5434/test# select * from t2;
     id
    ----
      1
      2
      3
    (3 rows)
    
    Ist das korrekt? Die Daten sind bei Dir extremst schlecht verständlich, bitte benutze passende Formatierung, siehe auch Hilfe.

    Falls das so korrekt ist: wie soll das Ergebniss aussehen? Das ist unverständlich bei Dir.
     
  3. pauline1

    pauline1 Benutzer

    Hallo vielen Dank, es ist richtig, was du geschrieben hast. Lösung möchte ich, damkit es so aussieht, wenn es auch so geht:

    Code:
    id     key 
    1        a         b      null
    2       a          c      null
    3       d          f       v
    
    Im Enddefekt möchte ich, damit wenn Mehr als ein Datensatz, eine neue Spalte entsteht, wo der Datensatz eingetragen wird, oder ist das Quatsch?
    Ich möchte immer einen Datensatz haben, aber mit allen key, die in tab2 sind.

    Oder vielleicht gibt es eine Funktion wo ich die key nach comma zu eine Spalte eintragen kann???:
    Code:
    id     key  
    1        a, b        
    2       a, c        
    3       d ,f,v      
    
     
  4. akretschmer

    akretschmer Datenbank-Guru

    geht, ich verwendet aber PostgreSQL:

    Code:
    andreas@[local]:5434/test# select t2.id, string_agg(t1.key,', ') from t2 left join t1 on t2.id=t1.id group by t2.id order by t2.id;
     id | string_agg
    ----+------------
      1 | a, b
      2 | a, c
      3 | d, f, v
    (3 rows)
    
    Sinngemäß, Du mußt key aggregieren und auf die id gruppieren.
     
  5. pauline1

    pauline1 Benutzer

    Hallo, danke mit verketten: stuff Funktion bei MSSQL habe ich auch das bekommen!
    Vielen Dank!

    Nun habe ich Tabelle:
    Code:
     id | string_agg
    ----+------------
      1 | a, b
      2 | a, c
      3 | d, f, v
    
    
    Könnte ich, gibt es so was, dass ich eine Funktion einbaue, wo mir die Spalte string_agg teilt auf einzelne Spalten, nach ","???
     
  6. akretschmer

    akretschmer Datenbank-Guru

    IIRC hat M$SQL eine Pivot-Funktion.
     
  7. pauline1

    pauline1 Benutzer

    Danke ... ich schaue mal ... falls du gúte Beispiel hast, schick bitte. Danke!

    Es gibt natürlich eine Menge Beispiele, aber ich verstehe sie leider nicht:(
     
  8. pauline1

    pauline1 Benutzer

    Code:
    select id, string_agg
    from
    tab1
    unpivot
    (string_agg for string_aggd in ([string_agg])) up
    
    Natürlich bekomme ich Fehler.
     
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