edward12 Geschrieben 27. August 2013 Teilen Geschrieben 27. August 2013 Einen schönen guten Tag wünsche ich euch. Nachdem ich die Suche im Forum als auch die google suche betätigt habe, wollte ich mein Anliegen euch vortragen, in der Hoffnung auf Hilfe. Sachverhalt: Ich darf eine Abfrage erstellen, welche sich über mehrere Tabellen erstreckt. Aufzeigen werde ich die Stelle an der ich nicht weiterkomme. Tabelle 1) Vorgangkalk [table=width: 300] [tr] [td]ROWVORGANG[/td] [td]BEREICH[/td] [td]FLNETTO[/td] [/tr] [tr] [td]48[/td] [td]S[/td] [td]100[/td] [/tr] [tr] [td]48[/td] [td]I[/td] [td]300[/td] [/tr] [/table] Tabelle2) Vorgang [table=width: 200] [tr] [td]ROWVORGANG[/td] [td]BETREFF[/td] [/tr] [tr] [td]48[/td] [td]TEST[/td] [/tr] [/table] Die Zieltabelle stelle ich mir so vor: [table=width: 500] [tr] [td]ROWVORGANG[/td] [td]BETREFF[/td] [td]SOLL[/td] [td]IST[/td] [/tr] [tr] [td]48[/td] [td]test[/td] [td]100[/td] [td]300[/td] [/tr] [/table] Der Code hierfür sieht wie folgt aus: DECLARE @SOLL decimal(14,2), @IST decimal(14,2) SELECT @IST= FLNETTO FROM DB.dbo.VORGKALK , DB.dbo.VORGANG WHERE VORGKALK.BEREICH= 'I' AND VORGKALK.ROWVORGANG='48'; SELECT @SOLL= FLNETTO FROM DB.dbo.VORGKALK WHERE VORGKALK.BEREICH= 'S' AND VORGKALK.ROWVORGANG='48' SELECT Vorgangs.VORGANGNR, Vorgangs.BETREFF AS BAUVORHABEN, @SOLL AS Fremdleistung, @IST AS "FL Rueck" FROM DB.dbo.VORGANG Vorgangs, DB.dbo.VORGRECHNUNG VRECHNUNG, DB.dbo.VORGKALK VORGANGK WHERE Vorgangs.ROWVORGANG=VRECHNUNG.ROWVORGANG AND Vorgangs.ROWVORGANG=VORGANGK.ROWVORGANG GROUP BY Vorgangs.VORGANGNR, Vorgangs.BETREFF, VORGANGK.FLNETTO Das Problem welches ich nun habe, ist das ich ja festlege, dass er nur die Werte von der ROWVORGANG nimmt. Würde ich hier, wie es für mich richtig wäre, folgendes eingeben: SELECT @IST= FLNETTO FROM DB.dbo.VORGKALK , DB.dbo.VORGANG WHERE VORGKALK.BEREICH= 'I' AND VORGKALK.ROWVORGANG=VORGANG.ROWVORGANG; SELECT @SOLL= FLNETTO FROM DB.dbo.VORGKALK WHERE VORGKALK.BEREICH= 'S' AND VORGKALK.ROWVORGANG=VORGANG.ROWVORGANG' So fügt er bei den Feldern SOLL und IST eine 0 ein, da der allererste Vorgang (Nr.1) den Zahlenwert 0 hat. Also scheint das Problem zu sein, dass die Variabeln nur einmalig gefüllt werden. Gibt es hier eine einfachere Lösung oder müsste ich um weiter mit Variabeln zu arbeiten es hinbekommen, dass Zeilen weise gearbeitet wird? Und wenn ja wie geht das? Ich habe es mit einer while Schleife versucht, hier legt er je durchlauf eine neue Tabelle an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
der_robert Geschrieben 27. August 2013 Teilen Geschrieben 27. August 2013 Geht mit Subselects relativ leicht ... (hattest du ja fast) select `Vorgang`.ROWVORGANG ,(select VORGANGK2.FLNETTO from `vorgangkalk` as VORGANGK2 where VORGANGK2.ROWVORGANG = `Vorgang`.ROWVORGANG and VORGANGK2.BEREICH = 'S' limit 1) as SOLL ,(select VORGANGK1.FLNETTO from `vorgangkalk` as VORGANGK1 where VORGANGK1.ROWVORGANG = `Vorgang`.ROWVORGANG and VORGANGK1.BEREICH = 'I' limit 1) as IST ,`Vorgang`.BETREFF from vorgang as `Vorgang` Ein Problem könnte es noch geben wenn du in der Tabelle "Vorgangkalk" mehr als nur einen Eintrag pro "BEREICH" und "ROWVORGANG" hast, dann bräuchtest du noch eine weitere Bedingung sodass im subselect nur ein Ergebnis zurück kommt (z.b. ein datum >- das im subselect ins order by asc/desc und schon hast du von den Datensätzen nur das neuste oder das älteste). Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.