Suche Hilfe für ein SQL-Statement

Für sonstige Unterhaltungen, welche nicht direkt mit Lazarus zu tun haben
Antworten
bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Suche Hilfe für ein SQL-Statement

Beitrag von bembulak »

Hallo liebe Leute!

Ich habe hier in der Arbeit ein Problem mit unserem MS-SQL 2005 Server und ich blicke nicht durch. Die SQ-Sprache ist mir noch ein Rätsel - ich habe noch nicht sehr lange damit zu tun. Es ist ein wenig schwierig zu erklären, da ich ja nicht weiß, was ich suche, aber ich versuche es mal:
Ich habe eine Abfrage, in der viele, viele JOIN Statements vorkommen. Die Abfrage im Original funktioniert. Ich muss aber noch ein Feld aus einer Tabelle, die noch nicht in der Abfrage ist, hinzufügen und ein Feld daraus auswerten.

Für unser ERP-System sind diese Abfragen in sogenannten *.rpt-Dateien gespeichert. Der Inhalt meiner Ursprünglichen sieht so aus:

Code: Alles auswählen

[Header]
Name=Eingangsrechnungsbuch
DESC=Journal
Category=11
Type=0
[FIELDS]
Field1=rebEinRechnung.ID;REBNr;REBNr;0
Field2=rebEinRechnung.fkAdresse;fkAdresse;fkAdresse;0
Field3=rebEinRechnung.RENr;RENr;RENr;0
Field4=rebEinRechnung.REDatum;REDatum;REDatum;1
Field5=rebEinRechnung.Bezeichnung;Bezeichnung;Bezeichnung;0
Field6=rebEinRechnung.Skonto;Skonto;Skonto;0
Field7=rebEinRechnung.Skontodatum;Skontodatum;Skontodatum;0
Field8=rebEinRechnung.Netto;Netto;Netto;3
Field9=rebEinRechnung.Brutto;Brutto;Brutto;3
Field10=rebEinRechnung.Nettofaelligkeit;Nettofaelligkeit;Nettofaelligkeit;1
Field11=rebEinReStatus.Name;Status;Status;0
Field12=adrAdressen.Name;ADR_Name;ADR_Name;0
Field13=adrAdressen.Zusatz;ADR_Zusatz;ADR_Zusatz;0
Field14=rebEinRechnung.Eingangsdatum;Eingangsdatum;Eingangsdatum;0
[TABLES]
Table1=((rebEinRechnung;INNER JOIN rebEinReStatus ON rebEinRechnung.fkEinReStatus = rebEinReStatus.pkEinReStatus) LEFT JOIN adrAdressen ON rebEinRechnung.fkAdresse = adrAdressen.AdrNrGes) LEFT JOIN rebBuchung ON rebEinRechnung.pkER = rebBuchung.fkER
[Orders]
Order1=rebEinRechnung.Eingangsdatum
[Links]
Formular=ERB_Journal.rpf
 
Ich müsste nun die Tabelle "rebGrundDaten" und daraus das Feld "fkProjNr (nvarchar(15), 0)" hinzufügen und weiß nicht, wie ich es anstellen soll.
Ich habe "oben" bei "Fields" schon

Code: Alles auswählen

Field15=rebGrunddaten.fkProjNr
hinzugefügt aber ich muss es ja irgendwie in meine Abfrage packen.
Der Abschnitt "[Tables]" dürfte dem SQL-Statement entsprechen, dann das kann ich mir im System anzeigen lassen. Das würde im Original so aussehen:

Code: Alles auswählen

SELECT rebEinRechnung.ID AS REBNr, rebEinRechnung.fkAdresse AS fkAdresse, rebEinRechnung.RENr AS RENr, rebEinRechnung.REDatum AS REDatum, rebEinRechnung.Bezeichnung AS Bezeichnung, rebEinRechnung.Skonto AS Skonto, rebEinRechnung.Skontodatum AS Skontodatum, rebEinRechnung.Netto AS Netto, rebEinRechnung.Brutto AS Brutto, rebEinRechnung.Nettofaelligkeit AS Nettofaelligkeit, rebEinReStatus.Name AS STATUS, adrAdressen.Name AS ADR_Name, adrAdressen.Zusatz AS ADR_Zusatz, rebEinRechnung.Eingangsdatum AS Eingangsdatum,
rebGrunddaten.fkProjNr AS ProjNr
FROM ((rebEinRechnung INNER JOIN rebEinReStatus ON rebEinRechnung.fkEinReStatus = rebEinReStatus.pkEinReStatus) LEFT JOIN adrAdressen ON rebEinRechnung.fkAdresse = adrAdressen.AdrNrGes) LEFT JOIN rebBuchung ON rebEinRechnung.pkER = rebBuchung.fkER ORDER BY REBNr
wie also kann ich das Feld für die Projektnummer meinem Statement übergeben, so das ich zu jeder Rechnung die passende Projektnummer bekomme?

Ich hoffe, ihr könnt mir helfen! Vielen Dank schon mal für die Mühen.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Suche Hilfe für ein SQL-Statement

Beitrag von monta »

Das Feld musst du bei SELECT ... einfügen:

Code: Alles auswählen

SELECT ..., rebGrunddaten.fkProjNr FROM ...
Und die Tablle musst du mit JOIN einbinden:

Code: Alles auswählen

FROM (((rebEinRechnung
INNER JOIN rebEinReStatus ON rebEinRechnung.fkEinReStatus = rebEinReStatus.pkEinReStatus)
LEFT JOIN adrAdressen ON rebEinRechnung.fkAdresse = adrAdressen.AdrNrGes)
LEFT JOIN rebBuchung ON rebEinRechnung.pkER = rebBuchung.fkE)
LEFT JOIN rebGrundDaten ON Fremdschlüssel = rebGrundDaten.Primärschlüssel
Welche Felder die Schlüssel sind, musst du wissen ;)

(PS: Darstellungsfehler bei langen Codezeilen hab ich gerade bemerkt nd wird behoben)
Johannes

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Suche Hilfe für ein SQL-Statement

Beitrag von bembulak »

Danke!
Ich werde es morgen mal versuchen, wenn ich wieder im Büro bin.

Eb
Lazarusforum e. V.
Beiträge: 242
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Suche Hilfe für ein SQL-Statement

Beitrag von Eb »

*.rpt sind crystal-reports Dateien.
Am sinnvollsten wäre es diese Datei mit CrystalReports direkt zu öffnen.
Hier hast du dann die Möglichkeit die Abfrage grafisch zusammenzuklicken, d.h. die gewünschte Tabelle hinzufügen
und das Feld in den Report zubringen.
Wie monta schon sagte, musst du aber wissen, über welche Felder du die neue Tabelle mit einer der vorhandenen verknüpfen musst,
damit du nicht doppelte oder falsche Daten in deinem Ergebnis hast.

Der SQL Server 2005 bringt das "SQL Server Management Studio" mit. Darin gibt es es einen Abfrage-Editor, mit dem,
oder, wenn du ODBC-Zugriff hast mit MSAccess, kannst du deine Abfrage ja zuerst mal testen.

Eberhard

Antworten