Problem bei Überkreuzabfrage



  • Nabend,

    ich habe Folgende Tabellenstrukturen
    Tabelle Abrechnungen

    ID      Route   Datum
    ---     -----   -----
    4	berlin	23.07.2008 	12	200	07:11	21:03
    5	polen	24.07.2008 	100	200	03:04	09:03
    

    Die restlichen Spalten sind hier irrelevant.
    und eine zweite Tabelle

    Tabelle Belege

    Datum      Belegnummer  Rechnungsbetrag
    
    23.07.2008 	9	11
    23.07.2008 	10	20
    23.07.2008 	11	100
    23.07.2008 	12	6
    24.07.2008 	13	200
    24.07.2008 	14	300
    

    So nun möchtre ich mittels SQL eine Abfrage erzeugen die in Etwa so aussehen sollte

    Belegnr Rechnungsbetrag
    4	berlin	23.07.2008 	12	200	07:11	21:03     9    11
    4	berlin	23.07.2008 	12	200	07:11	21:03     10    20
    4	berlin	23.07.2008 	12	200	07:11	21:03     11    100
    4	berlin	23.07.2008 	12	200	07:11	21:03     12    6
    5	polen	24.07.2008 	100	200	03:04	09:03     13    200
    5	polen	24.07.2008 	100	200	03:04	09:03     14    300
    

    D.h. das mir alle Routen nur mit den dazugehörigen Belegnummern angezeigt werden, ich hoffe meine Veranschauchlichung war eindeutig...
    Ich benutze Visual Studio 2008 Prof. mit dem SQL Server(Also das bescheuerte MSSQL)
    Ich hoffe ihr könnt mir helfen.



  • Das kannst du so nicht sauber joinen. Du brauchst in der Belege Tabelle noch die Abrechnungs ID, oder eine Link-Tabelle.



  • Ok, wie würde der Join aussehen wenn ich die ID mit drinne hätte?



  • Das Problem an der Sache ist, das die Beleg Tabelle nicht mit gleichzeitig mit der Abrechnung Tabelle gefüllt wird.D.h. wenn ich die Abrechnungtabelle fülle, muss nicht zwangsläufig auch die Belegtabelle gefüllt werden und da würde es Probleme mit den Inserts geben, wenn ich keine Datensätze in die Belegtabelle einfüge, da ich ja die ID der Abrechnungstabelle einfüge...



  • Das dargestellte Ergebnis würde erreicht werden, wenn die beiden Tabellen über das Datum verbunden werden würden. Aber ob das hier nur Zufall ist oder tatsächlich gewollt ist kann ich nicht beurteilen.



  • @Firefighter:

    Wenn du wirklich Belege und Abrechnungen unabhängig voneinander eingeben können möchtest, und jeder Beleg nur einer Abrechnung zugeordnet werden kann, dann so:

    Abrechnung:
        Abrechnung_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
        ...
    
    Beleg:
        Beleg_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
        Abrechnung_ID INT NULL -- foreign key auf Abrechnung, nullbar
        ...
    

    Wenn du willst dass man Belege immer nur eingeben kann wenn es schon eine passende Abrechnung gibt, dann mach das foreign key Feld einfach NOT NULL -> fertig.
    (wahrscheinlich nicht sinnvoll)

    Und wenn du Belege und Abrechnungen völlig frei verknüpfen können möchtest, dann mach es so:

    Abrechnung:
        Abrechnung_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
        ...
    
    Beleg:
        Beleg_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1)
        ...
    
    Abrechnung_Beleg_Link
        Abrechnung_ID INT NOT NULL -- foreign key Abrechnung
        Beleg_ID INT NOT NULL -- foreign key Beleg
    

    Wobei ich mir nicht vorstellen kann dass du sowas willst - kann ja IMO nur Blödsinn rauskommen wenn man erlaubt dass Belege mehrfach abgerechnet werden.



  • Danke dir, aber mal noch eine andere Frage.Wie kann ich unter Visual Studio 2008 einstellen das er die AbrechnungsID und BelegID gleichzeitig mit in die Linktabelle einfügen soll wenn in den Haupttabellen etwas eingefügt werde?.D.h. das er automatisch die verknüpfung mit herstellt?wenn sie als Foreign key eingestellt sind



  • Wenn Du in Visual Studio mit strong typed datasets arbeitest, kannst Du Relation-Objekte zwischen Deinen DataTables definieren. Wenn Du dann diese in Deinen BindingSources verwendest, sollte er den Fremdschlüssel automatisch einfügen.


Anmelden zum Antworten