AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

JOIN geht nicht

Ein Thema von Hansa · begonnen am 1. Jan 2013 · letzter Beitrag vom 1. Jan 2013
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

JOIN geht nicht

  Alt 1. Jan 2013, 16:38
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBExpert
Prost Neujahr,

habe hier folgende Stored Procedure :

Code:
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
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 :

"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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: JOIN geht nicht

  Alt 1. Jan 2013, 16:47
Deine WHERE-Klausel dürfte Dir deinen Neujahrstag vermiesen, schätze ich.

Neujahr.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.714 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: JOIN geht nicht

  Alt 1. Jan 2013, 17:24
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
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf