🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Abfrage mit Count

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Lizzy
Beiträge: 10
Registriert: Di 8. Jul 2014, 10:58

Abfrage mit Count

Beitrag von Lizzy » Do 18. Sep 2014, 09:48

Guten Morgen liebe forum-Mitglieder,

ich komme mal wieder nicht weiter mit meinen Bas-Abfragen.

Ich habe zwei Tabellen. Eine Tabelle "Angebot" enthält die Spalten Angebots-Nr. (Primärschlüssel), Datum, Kunden-Nr. Die zweite Tabelle "Positionen" enthält die einzelnen Positionen zum jeweiligen Angebot und den Punkt ob der jeweilige Artikel gekauft wurde oder nicht. Diese Tabellen sind über die Angebots-Nr. über eine 1:n Beziehung miteinander verbunden.
Ich möchte nun aus meinen Datensätzen wissen wieviele Angebote gibt es und wieviele Artikel wurden gekauft. Einfach nur eine Anzahl zu jeder Frage. Ich bekomme das in Einzelabfragen auch über die Syntax
SELECT COUNT( "Angebots-Nr." ) AS "Anzahl Angebote" FROM "Angebot"
hin. Nun möchte ich diese beiden Abfragen aber in einer kombinieren. Dass heißt eine Zahl für Anzahl Angebote und eine Zahl für Anzahl Käufe. Ich komme jedoch mit dem JOIN-Befehl nicht klar. Beziehungsweise habe ich es mit dem Assistenten versucht und ich bekomme immer mehrere Zeilen, da es zu jedem Angebot mehrere Positionen gibt und auch mit einer Gruppierung werden die Angebote nicht mehr zusammengefasst.

Über jeden Tipp freue ich mich!

Viele Grüße,
Lizzy

pmoegenb

Re: Abfrage mit Count

Beitrag von pmoegenb » Do 18. Sep 2014, 10:23

Hallo Lizzy,

Du musst die Tabelle gruppieren.

Beispiel:

Code: Alles auswählen

SELECT COUNT(*) AS "Anzahl", "Angebots-Nr."
FROM "Positionen"
GROUP BY "Angebots-Nr."
ORDER BY "Angebots-Nr."
oder

Code: Alles auswählen

SELECT COUNT(*) AS "Anzahl", "Angebots-Nr."
FROM "Positionen"
WHERE "Gekauft" = True
GROUP BY "Angebots-Nr."
ORDER BY "Angebots-Nr."

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage mit Count

Beitrag von RobertG » Do 18. Sep 2014, 16:17

Hallo Lizzy,

so ganz verstanden habe ich nicht, warum Du die Tabelle "Angebot" in der Abfrage hast. Sollen sämtliche Angebote gezählt werden? Sollen die Angebote gezählt werden, die auf einen Kunden zutreffen?

Ich schreibe einmal zur Tabelle "Positionen" eine Abfrage auf, die erst einmal sämtliche "Artikel" zählt und dann nur die Artikel, die bei "gekauft" ein 'true' haben.

Code: Alles auswählen

SELECT "a"."Angebots-Nr.", COUNT("a"."Artikel") AS "Angebotsanzahl", (SELECT COUNT("Artikel")  FROM "Positionen" WHERE "gekauft" = True AND "Angebots-Nr." = "a"."Angebots-Nr.") AS "Anzahl gekauft" FROM "Positionen" AS "a" GROUP BY "a"."Angebots-Nr."
Damit hast Du beide Zählungen in einer Übersicht stehen.

Schau einmal unter "Korrelierte Unterabfrage" im Handbuch nach.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Lizzy
Beiträge: 10
Registriert: Di 8. Jul 2014, 10:58

Re: Abfrage mit Count

Beitrag von Lizzy » Fr 19. Sep 2014, 09:06

Guten Morgen Peter und Robert,

Danke für Eure schnelle Rückmeldung. Wir kommen der Sache auch schon näher. Hier mein aktueller Code:

SELECT COUNT("Positionen"."Angebots-Nr.") AS "Anzahl Angebote", COUNT ("Positionen"."Kauf") AS "Anzahl Kauf"
FROM "Positionen"
WHERE "Kauf" = True
GROUP BY "Angebots-Nr."
ORDER BY "Angebots-Nr."

In der Spalte Anzahl Angebote wird eine 4 gezählt und in Spalte Kauf wird auch 4 gezählt. Ich habe aber insgesamt 5 Angebote aber nur 1 Angebot in dem 4 Artikel verkauft wurden, in meiner Datenbank hinterlegt. Zur Erklärung, diese Abfrage soll eine allgemeine Übersicht über das Verkaufsgeschehen geben, also wieviele Angebote geschrieben vs. in wievielen Fällen (Angebote) kam es zum Kauf (unabhängig von der Anzahl der Artikelmenge). Das Ergebnis muss momentan mit meinen Beispieldatensätzen lauten: 5 Angebote, 1 Verkauf (mit 4 Artikeln)
Unter Anzahl Angebote soll deshalb die Anzahl der Angebote gezählt werden, die geschrieben wurden, unabhängig ob es zum Kauf kam oder nicht. Einfach wieviele Datensätze sind in der Datenbank? Unter Anzahl Kauf steht die Anzahl von Angeboten, die in irgendeiner Form zum Verkauf führten.

Meine Tabellen sehen dazu so aus:
Angebot
Angebots-Nr. (verknüpft mit Angebots-Nr. in Tab. Positionen)
Datum
Kunden-Nr. (verknüpft mit tabelle Kundendaten; 1:n Bez.)
Betreuer

Positionen
automatische ID
Angebots-Nr. (verknüpft mit Angebots-Nr. in Tab. Angebot; 1:n)
ArtikelNr. (verknüpft mit ArtikelNr. in Tab. Artikel; 1:n Bez.)
Anzahl
Kauf

Ich habe versucht hier mit OUTER JOIN zu arbeiten, aber da ich ein kompletter Neueinsteiger bin (SQL + Datenbanken) arbeite ich mich in kleinen Schritten voran :-)
Deshalb großes Danke für eure Hilfe!

Einen schönen Start in den Tag von Lizzy.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage mit Count

Beitrag von RobertG » Fr 19. Sep 2014, 20:14

Hallo Lizzy,

Code: Alles auswählen

SELECT COUNT("Positionen"."Angebots-Nr.") AS "Anzahl Angebote", COUNT ("Positionen"."Kauf") AS "Anzahl Kauf"
FROM "Positionen"
WHERE "Kauf" = True
GROUP BY "Angebots-Nr."
ORDER BY "Angebots-Nr."
Da Du in den Bedingungen "Kauf" = True stehen hast werden nur die Datensätze gezählt, bei denen natürlich ein Kauf erfolgreich gelaufen ist. Da zu jedem dieser Datensätze eine Angebots-Nr. gehört kommt natürlich bei beiden die gleiche Anzahl raus. COUNT() zählt nur die Felder, in denen etwas drin steht - Deine Abfrage würde ohne Gruppierung 4 Zeilen ergeben - also beide Count-Anweisungen mit dem gleichen Ergebnis.
Die Sortierung braucht hier überhaupt nicht zu stehen, da Du ja schließlich nur einen Datensatz zeigst.
Wenn Du 5 Angebote gelistet haben willst, muss erst einmal die Bedingung raus:

Code: Alles auswählen

SELECT COUNT("Positionen"."Angebots-Nr.") AS "Anzahl Angebote"
FROM "Positionen"
GROUP BY "Angebots-Nr."
Da Du nur die unterschiedlichen Nummer hast ergibt das jetzt 5 Angebote. Für das eine Angebot, bei dem (mehrere) Käufe erfolgt sind, muss jetzt eine 1 erscheinen:

Code: Alles auswählen

SELECT COUNT("Positionen"."Angebots-Nr.") AS "AngeboteMitKauf"
FROM "Positionen"
WHERE "Kauf" = True
GROUP BY "Angebots-Nr."
Jetzt möchtest Du das eine Angebot neben den 5 gesamten Angeboten sehen:

Code: Alles auswählen

SELECT COUNT("Positionen"."Angebots-Nr.") AS "Anzahl Angebote",
(SELECT COUNT("Positionen"."Angebots-Nr.")
FROM "Positionen"
WHERE "Kauf" = True
GROUP BY "Angebots-Nr.") AS "AngeboteMitKauf"
FROM "Positionen"
GROUP BY "Angebots-Nr."
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Lizzy
Beiträge: 10
Registriert: Di 8. Jul 2014, 10:58

Re: Abfrage mit Count

Beitrag von Lizzy » Di 23. Sep 2014, 13:49

Hallo Robert,

danke schon einmal für deine Hilfe. Leider hat das nicht so richtig geklappt. Ich hänge einen screen shot mit an die Nachricht.
Es werden die einzelnen Positionen aus einem Angebot gezählt und nicht die Angebotsnummern. In dem screenshot sieht man das unten die 5 Datensätze angezeigt werden. Ich hätte eben gern diese "5" unter Anzahl Angebote zu stehen und "4" bei Angebote mit Kauf. Es gibt also immer nur eine Zeile bei dieser Abfrage.

Ich vermute, dass ich die Angebotsnummern aus der Tabelle 'Angebote' zählen muss. Das schaffe ich ja auch mit einer einzelnen Abfrage. Und das ich dann aus der Tabelle 'Positionen' die Kaufhäcken zähle. Das alles mit dem Join-Befehl. Aber da komme ich wie gesagt nicht weiter.
mein Ergnis soll so aussehen:
Anzahl Angebote Anzahl Angebote mit Kauf
5 4

Hast du noch eine Idee?

viele Grüße,
Ulrike
Dateianhänge
DB-notes.odp
(64.83 KiB) 249-mal heruntergeladen

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage mit Count

Beitrag von RobertG » Di 23. Sep 2014, 15:50

Hallo Ulrike,

ich kehre einmal zu einem vorhergehenden Post in diesem Thread zurück:

Code: Alles auswählen

SELECT "a"."Angebots-Nr.", COUNT("a"."Angebots-Nr.") AS "Angebotsanzahl", (SELECT COUNT("Angebots-Nr.")  FROM "Positionen" WHERE "Kauf" = TRUE AND "Angebots-Nr." = "a"."Angebots-Nr.") AS "Anzahl gekauft" FROM "Positionen" AS "a" GROUP BY "a"."Angebots-Nr."
Damit hast Du die Beziehung zu den Angebotsnummern bei dem Kauf.

Einfacher wäre es, wenn Du eine Beispieldatenbank statt einer Präsentationsdatei anhängen würdest. Das geht merkwürdigerweise in dieser Liste nicht so einfach. Du musst so eine Datei entweder packen oder einfach die Dateiendung auf *.zip ändern.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten