none
SQL Statement

    Frage

  • Hallo

    Ich versuche ein SQL Statement zu bauen das folgendes abbildet:

    Ich habe eine Tabelle mit Bestellköpfen (POHead), für den POHead gibt es sowohl x Bestellkopftexte(POHeadTxt) wie auch Bestellzeilen (POLine).

    Diese Zeilen haben wiederum x BestellzeilenTexte (POLineTxt)

    Verknüpft sind diese untereinander wie folgt:

    POHead hat ein Feld DBK-Best mit einer eindeutigen Kennung...diese ist auf POHeadTxt und auf auf den POLines.

    Die POLineTxt hat ein Feld DBK-Bpos als Markierung...

    Wie baue ich ein vernünftiges SQL Skript auf das mit evtl auch nur eine gewisse Anzahl POHead zurückliefert (sagen wir 20 für Testzwecke) mit sämtlichen dazugehörenden Texten, Lines und LineTexten

    Mittwoch, 13. Februar 2013 15:00

Alle Antworten

  • Hi,

    poste bitte mal eine Tabellendefinition und einige Beispieldaten. Entweder im Format:

    [Tabelle1]
    ID int PK
    Name varchar
    Irgendwas int
    ...

    oder gleich als SQL Skript für alle relevanten Tabellen.

    In deinem Fall wäre das wohl in etwa das hier:

    SELECT tab1.Feld1,
           tab1.Feld2,
           tab2.FeldX,
           tab2.FeldY,
           tab3.FeldA,
           tab3.FeldB
    FROM   Tabelle1 tab1
           INNER JOIN Tabelle2 tab2 ON t2.Spalte = t1.Spalte
           INNER JOIN Tabelle3 tab3 ON t3.Spalte = t2.Spalte
    

    Wie genau das Statement aussehen muss, kann man ohne zu wissen, wie deine Tabellen wirklich aussehen, nicht sagen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 13. Februar 2013 18:20
  • Ja das es schwer ist ohne genau zu wissen wie die Tabellen aufgebaut sind verstehe ich.

    Mein grösstes Problem ist die Hierarchie ab zu bilden...

    Tabelle 1 (z.b SalesTable)

            Tabelle 2 (z.B. SalesHeaderTxt)

            Tabelle 3 (z.B. SalesLine)

                   Tabelle 4 (z.B. SalesLineTxt)

    Montag, 18. Februar 2013 13:27
  • Ja das es schwer ist ohne genau zu wissen wie die Tabellen aufgebaut sind verstehe ich.

    Und warum gibst Du uns die Info dann nicht mal? :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 18. Februar 2013 13:40
  • ich versuch mal das wichtigste zusammen zu stellen....sind riesige Tabellen mit x hundert Feldern aus einem uralt Programm für das ich nun Datenmigration machen muss

    Montag, 18. Februar 2013 13:59
  • ich versuch mal das wichtigste zusammen zu stellen....sind riesige Tabellen mit x hundert Feldern aus einem uralt Programm für das ich nun Datenmigration machen muss

    Nimm halt die drei genannten Tabellen und bilde die Struktur der benötigten Spalten ab. D.h. es sollten mind. alle Primärschlüssel und Fremdschlüssel (inkl. Kennzeichnung der jeweiligen Spalten und der Beziehung untereinander) zu sehen sein und ggfs. noch eine Spalte mit einem Namen, damit man die Ergebnisse auch ordentlich vergleichen kann.

    Was Du mit "Hierarchie abbilden"meinst, wäre auch noch wichtig. Eine Ausgabe, bspw. in Form von Datensätzen, Unterdatensätzen, die dann auch noch grafisch anzeigen, wie Sie miteinander in Beziehung stehen, ... geht so erstmal nicht. Das ist Sache der Anwendung, die die Ausgabe erzeugt. Daher wäre es sinnvoll, wenn Du neben der Tabellendefinition und den Beispieldatensätzen auch die gewünschte Ausgabe (mit den Beispieldaten) aufzeigst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 18. Februar 2013 14:31
  • Mittwoch, 20. Februar 2013 11:40
  • Schade, dass sich im Bild nicht die Tabellennamen aus dem OP wiederfinden.

    Das hier sollte aber helfen:

    SELECT *
    FROM   (Select top 20 * from POHead) tab1
           LEFT JOIN POHeadTxt tab2 ON t1.[DBK-Best]  = t2.[DBK-Best] 
           LEFT JOIN POLine tab3 ON t1.[DBK-Best]  = t3.[DBK-Best] 
           LEFT JOIN POLineTxt tab4 ON t3.[DBK-Bpos]   = t4.[DBK-Bpos]  ;
    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    http://www.insidesql.org/blogs/cmu/
    • Als Antwort vorgeschlagen Stefan FalzMVP Mittwoch, 27. März 2013 22:39
    Donnerstag, 21. Februar 2013 07:43