![]() |
[Firebird]Daten aus zwei Tabellen zählen
Hallo SQL-Experten,
ich habe zwei einfache Tabellen T1 und T2, die nur je 3 Felder haben: KNR - INTEGER LFD - INTEGER WOCHE - VARCHAR(10) Beide haben dieselbe Struktur. Für jeden Kunden (KNR) kann es beliebig viele Einträge in beide Tabellen geben. Diese möchte ich jetzt für eine bestimmte Woche zählen. Dazu habe ich folgendes SQL Statement geschrieben:
SQL-Code:
Das funktioniert auch, aber ich möchte das Ergebnis gerne in folgender Form:
SELECT KNR, COUNT(KNR) as ANZ, 'K1' as VON FROM tab1
WHERE WOCHE='20/04' GROUP BY KNR UNION SELECT KNR, COUNT(KNR) as ANZ, 'K2' as VON FROM tab2 WHERE WOCHE='20/04' GROUP BY KNR
Code:
Bekommt jemand das mit einem SQL Statement hin?
KNR ANZ_IN_T1 ANZ_IN_T2
============================ 1 2 3 2 0 2 3 4 0 Ich habe es schon mit folgendem Statemet versucht:
SQL-Code:
aber obwohl ich einen FULL OUTER JOIN habe, erscheint nur der Kunde, der in beiden Tabellen vorkommt.
SELECT T1.KNR, COUNT(T1.KNR), COUNT(T2.KNR) as ANZ FROM tab1 T1
FULL OUTER JOIN tab2 T2 ON T1.KNR=T2.KNR WHERE T1.WOCHE='20/04' AND T2.WOCHE='20/04' GROUP BY T1.KNR |
Re: [Firebird]Daten aus zwei Tabellen zählen
Hi MrSpock,
so geht's zumindest etwas besser:
SQL-Code:
Allerdings kommen dann nur die Kunden, die in der Tabelle 1 stehen! Wenn ein Kunde nur in Tabelle 2 steht erscheint der nicht! WEnn Du die Where-Bedingung weglässt, dann kommt auch der, allerdings ohne KNR (Da die KNR von Tabelle 1 ausgegeben wird, in der der Kunde aber nicht steht!)
SELECT T1.KNR, COUNT(T1.KNR), COUNT(T2.KNR) as ANZ FROM t1 T1
full outer JOIN t2 T2 ON T1.KNR=T2.KNR WHERE T1.WOCHE='20/04' GROUP BY T1.KNR Selbst der Weg über ne SP bringt nicht wirklich viel. Eine Lösung wäre dann möglich, wenn Du ausschließen kannst, dass in beiden Tabellen Kunden sind, die in der jeweils anderen Tabelle nciht enthalten sind, sprich: wenn in einer Tabelle alle möglichen Kunden stehen funzt das mit dem oberen SQL-Statement.... Grüße Lemmy |
Re: [Firebird]Daten aus zwei Tabellen zählen
Zitat:
sagt nicht gerade diese Zeile aus, dass die Kundennummer in beiden Tabellen vorkommen muss? Ciao, sepp001 |
Re: [Firebird]Daten aus zwei Tabellen zählen
Hallo sepp001,
nein, denn FULL OUTER JOIN ist im Grunde eine Zusammenfassung von LEFT OUTER und RIGHT OUTER JOIN, und das heißt, dass auch Datensätze in dem JOIN enthalten sind, für die es keine passenden KNR in der jeweils anderen Tabelle gibt. Ich habe mittlerweile eine Lösung, die genügend schnell ist, aber letztlich auf 3 Abfragen beruht. Ich glaube mit nur einer Abfrage geht es nicht, lasse mich aber gerne eines Besseren belehren :mrgreen:. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:58 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 by Thomas Breitkreuz