Frage zur Transformation von Daten

Tyroooon

Neuer Benutzer
Beiträge
3
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
 
Werbung:
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.
 
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
 
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.
 
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.
 
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)
 
Werbung:
Zurück
Oben