AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [Firebird]Daten aus zwei Tabellen zählen
Thema durchsuchen
Ansicht
Themen-Optionen

[Firebird]Daten aus zwei Tabellen zählen

Ein Thema von MrSpock · begonnen am 12. Mai 2004 · letzter Beitrag vom 12. Mai 2004
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

[Firebird]Daten aus zwei Tabellen zählen

  Alt 12. Mai 2004, 07:36
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:
SELECT KNR, COUNT(KNR) as ANZ, 'K1as VON FROM tab1
WHERE WOCHE='20/04'
GROUP BY KNR
UNION
SELECT KNR, COUNT(KNR) as ANZ, 'K2as VON FROM tab2
WHERE WOCHE='20/04'
GROUP BY KNR
Das funktioniert auch, aber ich möchte das Ergebnis gerne in folgender Form:

Code:
KNR  ANZ_IN_T1    ANZ_IN_T2
============================
1        2             3
2        0             2
3        4             0
Bekommt jemand das mit einem SQL Statement hin?

Ich habe es schon mit folgendem Statemet versucht:
SQL-Code:
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/04AND T2.WOCHE='20/04'
GROUP BY T1.KNR
aber obwohl ich einen FULL OUTER JOIN habe, erscheint nur der Kunde, der in beiden Tabellen vorkommt.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: [Firebird]Daten aus zwei Tabellen zählen

  Alt 12. Mai 2004, 11:35
Hi MrSpock,

so geht's zumindest etwas besser:

SQL-Code:
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
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!)

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
  Mit Zitat antworten Zitat
Benutzerbild von sepp001
sepp001

Registriert seit: 12. Mär 2004
Ort: Schwerin
34 Beiträge
 
Delphi 7 Professional
 
#3

Re: [Firebird]Daten aus zwei Tabellen zählen

  Alt 12. Mai 2004, 11:35
Zitat von MrSpock:
FULL OUTER JOIN tab2 T2 ON T1.KNR=T2.KNR
Hallo,

sagt nicht gerade diese Zeile aus, dass die Kundennummer in beiden Tabellen vorkommen muss?

Ciao,
sepp001
Deutschland ist das einzige Land der Welt, in dem Männer achtlos über ein halbes Dutzend nackter Frauen klettern, um an eine Flasche Bier zu kommen.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#4

Re: [Firebird]Daten aus zwei Tabellen zählen

  Alt 12. Mai 2004, 12:24
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 .
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz