Join

30/01/2009 - 15:48 von Eckhard Sallermann | Report spam
Hi Leut?s

select sum(menge) ,
sum( vk * menge
from auftrag..auftragspositionen
where year(datum) between 2008 and 2009
and not storno

folgendes Statement ermittelt die Daten aller Artikel, die
verkauft worden sind. Nun gibt es aber auch Artikel in der
Artikeldatenbank, die nicht innerhalb des Zeitraums verkauft wurden.
Diese möchte ich aber auch in dem Ergebnis haben, wie kann ich das
anstellen ?

left join artikel..artikel as artikel on artikel.nummer =
auftragspositionen.nummer funktioniert da nicht.

Hat jemand eine Idee ?
 

Lesen sie die antworten

#1 Hannes Brunner
30/01/2009 - 16:39 | Warnen spam
Hallo Eckhard,

Eckhard Sallermann schrieb:
Hi Leut?s

select sum(menge) ,
sum( vk * menge
from auftrag..auftragspositionen
where year(datum) between 2008 and 2009
and not storno

folgendes Statement ermittelt die Daten aller Artikel, die
verkauft worden sind. Nun gibt es aber auch Artikel in der
Artikeldatenbank, die nicht innerhalb des Zeitraums verkauft wurden.
Diese möchte ich aber auch in dem Ergebnis haben, wie kann ich das
anstellen ?

left join artikel..artikel as artikel on artikel.nummer =
auftragspositionen.nummer funktioniert da nicht.



kein Wunder, ist ja auch verkehrt rum. Also: right join, oder Tabellen
vertauschen. Und zusàtzlich den Datumsfilter in den join-Ausdruck
integrieren, also:

select a.nummer, sum(p.menge), sum(p.vk*p.menge)
from artikel..artikel a left outer join auftrag..auftragspositionen p
on a.nummer = p.nummer
and p.datum between '20080101' and '20091231'
and p.storno = 0

Hinweis: Diese Art von Datumsfilter ermöglicht die Einbeziehung eines
Index, im Gegensatz zu deiner Variante.

Gruß
Hannes

Ähnliche fragen