Problem bei Überkreuzabfrage
-
Nabend,
ich habe Folgende Tabellenstrukturen
Tabelle AbrechnungenID 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 TabelleTabelle 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.
-
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.