Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Count-Funktion zählt IDs doppelt?

Begonnen von henfoni, August 02, 2012, 10:12:05

⏪ vorheriges - nächstes ⏩

henfoni

Moin, ich habe ein Sache, die ich mir nicht erklären kann. Ich hab eine Abfrage, die 3 Tabellen mit einbezieht. (T1,T2,T3).

SELECT Count(T1.id) AS AnzahlvonT1
FROM T1 INNER JOIN (T2 INNER JOIN T3 ON T2.id = T3.T2_id) ON T1.id = T2.T1_id
WHERE (((T1.sys_eing_dat) Between #1/1/2012# And #1/3/2012#) AND ((T3.Rechnungsnr)<>889));

Nun bekomme ich 2 verschiedene Ergebnisse, wenn ich mich mit Count arbeite, oder mir alle IDs ohne Count ausgeben lassen, die Anzahl also so nachgucke. Den Fehler habe ich auch schon gefunden, wenn ich mit Count abfrage, dann zählt er alle Tupel (T1.id,T2.id,T3.id) und somit doppelte T1.ids.
Wenn ich ohne Count arbeite, dann zählt er auch wirklich nur die IDs der T1. Ist das so gewollt? Die Count-Funktion erscheint mir dann in dem Zusammenhang ziemlich sinnlos :/

Gruß
Wer nicht fragt, bleibt dumm.

DF6GL

Hallo,

schreib mal:

SELECT Count(*) AS AnzahlvonT1 ...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

henfoni

Hm kommt noch immer die falsche Anzahl raus
Wer nicht fragt, bleibt dumm.

ebs17

#3
ZitatWenn ich ohne Count arbeite, dann zählt er auch wirklich nur die IDs der T1. Ist das so gewollt? Die Count-Funktion erscheint mir dann in dem Zusammenhang ziemlich sinnlos :/

In meiner bescheidenen Vorstellung wird ohne Count gar nicht gezählt!

Count zählt in der gegebenen Datensatzgruppe, dabei Count(*) die Datensätze und Count(Feld) die Anzahl des Vorkommens eines Wertes im betreffenden Feld, Null wird dabei nicht mitgezählt. Da eine ID vermutlich nicht Null ist, dürfte oben das Ergebnis gleich sein.

Wenn Du die Anzahl der T1.id ohne Duplikate haben willst, müsstest Du zusätzlich geeignet gruppieren oder gleich nur in der entsprechenden Datensatzgruppe (Tabelle) zählen:
SELECT Count(T1.id) AS X
FROM T1


Beim Coden auch schon denken und dabei den gesunden Menschenverstand nicht ausschalten!

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

henfoni

Nur in der Tabelle T1 zählen geht nicht, da ich ja noch die Bedingung aus T3 brauche..

Ich hab exakt den gleichen Code, einmal mit Count und einmal ohne. Da sollte man doch denken, dass die gleiche Anzahl rauskommt oder nicht!?

Ich lasse es nun einfach bei einer Kreuztabelle, die sich auf die Abfrage ohne Count bezieht.
Wer nicht fragt, bleibt dumm.

Beaker s.a.

Hallo henfoni,
Hast Du das
ZitatCount zählt in der gegebenen Datensatzgruppe, dabei Count(*) die Datensätze und Count(Feld) die Anzahl des Vorkommens eines Wertes im betreffenden Feld
nicht gelesen oder nicht verstanden?
Hast Du
SELECT Count(*) AS AnzahlvonT1
FROM T1 INNER JOIN (T2 INNER JOIN T3 ON T2.id = T3.T2_id) ON T1.id = T2.T1_id
WHERE (((T1.sys_eing_dat) Between #1/1/2012# And #1/3/2012#) AND ((T3.Rechnungsnr)<>889));

mal ausprobiert?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

henfoni

Moin,

ich bin schon selten dämlich. Hat sich alles erledigt, habe das Group by bei der Zählung ohne Count übersehen.

Danke für eure Mühen+Geduld
Wer nicht fragt, bleibt dumm.