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

Daten aus versch. Tabellen via SQL horizontal in 1 Datensatz anzeigen?

Dieses Thema im Forum "Andere Datenbankserver" wurde erstellt von TK8782, 1 Februar 2018.

  1. TK8782

    TK8782 Neuer Benutzer

    Hallo,

    ich habe folgenden Fall in einer FireBird Datenbank:

    Artikeldaten werden mit Preisen gepflegt. Die Staffelpreise stehen in einer Untertabelle, d.h. es gibt für 1 Artikel in der Untertabelle mehrere Datensätze mit unterschiedlichen Mengen / Preisen.

    Nun möchte ich via SQL Daten aus der Haupttabelle und alle Preise aus der Untertabeller ermitteln, aber für jeden Artikel im Ergebnis nur 1 Datensatzzeile haben. Es soll pro Staffelpreis also nicht eine extra Zeile erzeugt werden sondern möglichst eine separate temporäre Spalte.

    Bsp:
    ArtikelNr Bezeichnung Menge VK
    1 Testartikel 1 10,00
    1 Testartikel 10 8,00
    1 Testartikel 100 6,00
    2 Testartikel2 1 11,00
    2 Testartikel2 10 9,00

    Als Ergebnis hätte ich nun gerne folgende Ausgabe:

    ArtikelNr Bezeichnung Menge1 VK1 Menge2 VK2 Menge3 VK3 usw.
    1 Testartikel 1 10,00 10 8,00 100 6,00
    2 Testartikel2 1 11,00 10 9,00
    usw.

    Gibt es da eine Möglichkeit via SQL das zu lösen?

    Vielen Dank.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Datenbanken sind keine Tabellenkalkulationen. In einem SELECT steht zur Planungszeit schon fest, wie viele Spalten des Ergebniss haben wird - das definierst Du in der Select-Liste. In Deinem Fall ist aber es nicht vorhersehbar, wie viele Einträge es in der Untertabelle es gibt.

    Du kannst 2 Dinge machen:

    • dynamisch ein SQL erstellen. Dazu erst einmal schauen, wie viele Spalten wir denn haben müssen. Daraus dann dynamisch ein valides SQL erstellen und dieses dann ausführen. Das ginge (in PostgreSQL z.B.) via einer Stored Proc und EXECUTE. In PG gäbe es auch noch die Möglichkeit, dazu das Contrib-Extension tablefunc zu nutzen, diese enthält eine crosstab-Funktion.
    • diese Idee vergessen und nach einer anderen Lösung suchen


    Andreas
     
  3. ukulele

    ukulele Datenbank-Guru

    Du kannst alle Preise in einer Spalte ausgeben mit Trennzeichen. Ob das aber in Firebird geht, weiß ich nicht. Auch ob das für weitere Verwendung sinnvoll ist kann ich nicht sagen.
     
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