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

Frage zur Transformation von Daten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Tyroooon, 3 Dezember 2015.

  1. Tyroooon

    Tyroooon Neuer Benutzer

    Hallo zusammen,

    ich habe eine relationale Datenbank mit Kundenbons vorliegen. Zur Auswertung wird diese jedoch in einer anderen Struktur benötigt. Es wäre klasse, wenn jemand eine Idee hätte wie es zu realisieren wäre.

    Folgender Aufbau:

    Ist-Zustand:

    ID (Bon) ArtikelNr
    1 4626
    1 3246
    2 4626
    3 4389
    4 9794
    5 3246
    5 4626
    5 4389

    Soll-Zustand:

    ID (Bon) Artikel 1 Artikel 2 Artikel 3 Artikel 4 ....Artikel n
    1 4626 3246
    2 4626
    3 4389
    4 9794
    5 3246 4626 4389

    Hoffe es wird deutlich und herzlichen Dank schon vor ab!

    Grüße,
    Tyrooooon
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Wie groß ist n?

    Kurze Antwort: Dein Ansinnen ist Bullshit, weil nicht klar ist, ob ein Wert in Artikel 5 oder Artikel 42 soll. Nur weil er untereinander an 5. oder 42. Stelle steht - Mengen sind per se unsortiert. Du kannst das maximal in eine Liste (Komma-separiert oder whatever) bekommen, nicht aber (mit trivialem Aufwand) in eine Tabelle mit dynamischer Spaltenzahl. Mit hinreichend krimineller Energie (wegen Verstoß gegen gesunden Menschenverstand) unter Einsatz schwerer Waffen (dynamisches SQL) kannst das erreichen. Aber, wie gesagt: vergiß es nach Möglichkeit.

    Falls N konstant ist könnt ich Dir was zeigen, allerdings unter Einsatz von row_number(), was aber Deine primitive Datenbank nicht kann.
     
  3. Tyroooon

    Tyroooon Neuer Benutzer

    Es gibt 2 theoretische Möglichkeiten.

    1.) n statisch halten. D.h. ich hätte bspw 1000 Artikelnummern und würde dann mit BOOLEAN abfragen ob Artikel in Bon enthalten ist oder nicht

    2.) Alle Artikelnummern eines Bons sollen nebeneinander geschrieben werden, ob nun in X Spalten oder alle durch Komma in einer, ist dabei relativ egal.

    Gruß,
    Tyrooooon
     
  4. akretschmer

    akretschmer Datenbank-Guru

    für 2)

    Code:
    test=*# select id, array_agg(art) from tyroooon group by id;
     id |  array_agg
    ----+------------------
      4 | {9794}
      1 | {4626,3246}
      5 | {3246,4626,4389}
      3 | {4389}
      2 | {4642}
    (5 rows)
    
    test=*# select id, array_to_string(array_agg(art),', ') from tyroooon group by id;
     id | array_to_string
    ----+------------------
      4 | 9794
      1 | 4626, 3246
      5 | 3246, 4626, 4389
      3 | 4389
      2 | 4642
    (5 rows)
    
    PostgreSQL.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    für 1)

    Code:
    test=*# select id, sum(art) filter (where r = 1) as art1, sum(art) filter(where r=2) art2 , sum(art) filter (where r=3) art3 from (select id, art, row_number() over (partition by id) as r from tyroooon) bla group by id ;
     id | art1 | art2 | art3
    ----+------+------+------
      1 | 4626 | 3246 |
      2 | 4642 |  |
      3 | 4389 |  |
      4 | 9794 |  |
      5 | 3246 | 4626 | 4389
    (5 rows)
    
    Und ja: PostgreSQL.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Ich seh grad, originale Tabelle vergessen:

    Code:
    test=*# select * from tyroooon ;
     id | art
    ----+------
      1 | 4626
      1 | 3246
      2 | 4642
      3 | 4389
      4 | 9794
      5 | 3246
      5 | 4626
      5 | 4389
    (8 rows)
    
    
     
  7. ukulele

    ukulele Datenbank-Guru

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