Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge

SQL count

logo3 / 2 Antworten / Flachansicht Nickles

hallo,

ich versuche verschweifel eine ganz einfache SQL in VBA access einzubinden.
ich habe eine Tabelle mit namen und ich möchte wissen wieviele einträge mit den namen Peter gibt.

Tabelle:total
Feld:name (definiert wie text)

Sowiel ich weiss diese sql anweisung ist korrekt


--------------------------------------------------
SELECT Count(total.name) AS zahlname
FROM total
HAVING (((Count(total.name))="Peter"));
--------------------------------------------------

bekomme folgenden fehlermedng

Datentypen übereinstimmen nicht

ich denke, das liegt daran, weil das Feld "name" als text deklariert.

Kann mir bitte jemand sagen, was in diese anweisung falsch ist?
und entsprechend anpassen ?

danke für eure Hilfe

logo



bei Antwort benachrichtigen
Andreas42 logo3 „SQL count“
Optionen

Hi!

Count() liefert die Zahl der gefundenen Datensätze zurück. Du vergleichst diese Zahl mit einem String, was natürlich nicht gehen kann.

Du willst offenbar alle Datensätze zählen, die "Peter" enthalten.

Der SQL-Dialekt, den ich nutzen muss, kennt solche Konstrukte ebenfalls. HAVING ist dort allerdings nur auf Felder anwendbar, die über eine Gruppierung (GROUP BY), zusammengefasst wurden.

Ich würde das ohne GROUP BY/HAVING erledigen. Die Beschränkung auf Datensätze mit name="Peter" würde im normalen WHERE-Part ohne Gruppierung erfolgen:

SELECT COUNT(*):zahlname
FROM total
WHERE total.name = "Peter"

Dir scheint eher vorzuschweben die Datensätze erst nach dem Namen zu gruppieren und dann zu vergleichen. Das würde bei mir etwas so aussehen:

SELECT total.name, COUNT(*):zahlname
FROM total
GROUP BY total.name
HAVING total.name = "Peter"

Wobei ich das eher als Möglichkeit zur weiteren Selektion der gruppierten Daten sehe. Als Beispiel währe dann folgendes machbar:

HAVING COUNT(*) > 1

Damit würden dann alle total.name geliefert, die mehrfach im Tabelle total vorkommen.

Wobei ich jetzt auch nicht wüsste, ob mein Compiler beide HAVING-Varianten schlucken würde (das Problem ist bei mir die arg eingeschränkte SQL-Syntax, die nicht wirklich viel zulässt, dafür aber unterschiedliche Datenbanken nutzen kann).

Ich nutze eigentlich immer die erste Variante (ohne GROUP BY/HAVING).

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen