![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBExpert
JOIN geht nicht
Prost Neujahr,
habe hier folgende Stored Procedure :
Code:
Pro Artikel brauche ich 2 Zeilen (für Statistik, hier eine für 2011 und 2012). Die sind auch meistens da. Allerdings nur dann, wenn zu einem Artikel tatsächlich ein Statistik-Datensatz existiert. Ist keiner da, dann ist nur 1 Zeile zu sehen. Es heisst aber auch so :
CREATE PROCEDURE NEW_PROCEDURE
returns ( artnr integer, jahrout integer, mon01 decimal(15,2)) as begin FOR SELECT NR AS ARTNR, JAHR, SUM (CASE MONAT WHEN 1 Then UMSATZ ELSE 0 END) as Mon01 FROM STAT S RIGHT JOIN ART A ON S.ID_ART=A.ID WHERE (JAHR = 2011 OR JAHR=2012) AND (ID_KUNDE=0) AND (A.ID=2871839) GROUP BY ARTNR,JAHR INTO :ARTNR,:JAHROUT,:MON01 do suspend; end "RIGHT JOIN: Return all rows from the right table, even if there are no matches in the left table" Wo ist da jetzt der Denkfehler ? Es sollen immer 2 Zeilen in der Datenmenge sein, selbst wenn zu den entsprechenden Artikeln keine Statistik-Daten existieren. |
AW: JOIN geht nicht
Deine WHERE-Klausel dürfte Dir deinen Neujahrstag vermiesen, schätze ich.
:party: Neujahr. |
AW: JOIN geht nicht
Dein right join bezieht sich nur auf die Artikel ID. Es werden also auch Artikel angezeigt, die auf der einen Seite nicht vorhanden sind.
Die Where Clause mit Jahreseinschränkung hat damit nichts zu tun. Aus dem SQL geht mangels Spaltenalias auch nicht hervor, woher das Jahr kommt. Um sicherzugehen, dass die gewünschten Jahre immer dabei sind, könnte man sie als separate Liste/Select/View einbinden und dort dann mit Outer Join zum Artikeljahr verbinden (Pivot Verfahren). Also in die From Clause eine 3.Menge mit den Jahren rein. Z.B. so für firebird(?):
Code:
(select 2011 as Jahr from RDB$DATABASE
union all select 2012 from RDB$DATABASE) as Jahre |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz