Zählen und Auswerten

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

muhtor
Beiträge: 5
Registriert: Mo, 10.06.2013 12:12

Zählen und Auswerten

Beitrag von muhtor »

Hallo liebe Comunity,

ich habe mich schon stundenlang durchs forum gekämpft um eine Möglichkeit zu finden mein Problem zu lösen :( Aber wie man ja merkt habe ich nix gefunden...

Daher bitte ich euch mal um Hilfe:

folgende situation...

Ich möchte in einer Abfrage (diese funktioniert schon) die gefilterten Datensätze zählenlassen...
Dies wäre schon mal ein Punkt
der andere Punkt ich möchte auch auswerten wenn in Feld1 der Wert "Grün" steht und in Feld2 der Wert "ja" (checkboxfeld) steht soll gezählt werden...
So das ich dann in einem Bericht die Prozentzahl errechnen kann...

Leider scheitert es bei allen dieser Schritte an meinem wissen...

Vllt könnte einer mir kurz einige Hilfestellungen oder Denkanstöße geben...

Danke im Vorraus

muhtor
RobertG
********
Beiträge: 2068
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zählen und Auswerten

Beitrag von RobertG »

Hallo muhtor,

das Prinzip geht folgendermaßen:

Code: Alles auswählen

SELECT "Farbe", "Check", (SELECT COUNT("Farbe") FROM "Tabelle" WHERE "Farbe" = 'Grün') AS "Anzahl Grün", (SELECT COUNT("Check") FROM "Tabelle" WHERE "Check" = TRUE) AS "Anzahl Ja" FROM "Tabelle"
Du kannst nur mit Subselects die einzelnen Ergebnisse erfassen. Die Funktionen wie COUNT und SUM sind auf eine Gruppierung der anderen in der Abfrage vorhandenen Spalten angewiesen. Alle Datensätze erhältst Du, indem Du ein Feld zählst, das auf jeden Fall immer einen Wert enthält (leere Felder werden nicht gezählt). Also hast Du noch einen Subselect wie z.B.

Code: Alles auswählen

SELECT COUNT("ID") FROM "Tabelle" WHERE ... 
In diesem, Subselect steckt, wie in allen anderen Subselects dann auch, noch einmal die Filteranweisung Deiner bisherigen Abfrage. Falls diese Filteranweisung sehr umfangreich ist, kannst Du auch aus der bsiherigen Abfrage eine Ansicht machen und statt eine Tabelle direkt die Ansicht auslesen.

Gruß

Robert
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Zählen und Auswerten

Beitrag von DPunch »

Servus

Eine solche Zählung nimmt man in der Regel folgendermassen vor:

Code: Alles auswählen

SELECT 
  SUM(1) AS "Gefilterte Datensätze",
  SUM(CASE WHEN "Feld1" = 'Grün' THEN 1 ELSE 0 END) AS "Datensätze Grün",
  SUM(CASE WHEN "Feld2" = TRUE THEN 1 ELSE 0 END) AS "Datensätze ja" 
FROM
  "meineTabelle" 
WHERE
  "Feld3" = 'meineBedingung'
Dabei muss das Häkchen in der Symbolleiste bei "SQL-Kommando direkt ausführen" gesetzt sein und natürlich musst Du Tabellen- und Feldnamen sowie die WHERE-Klausel eben auf Deinen konkreten Fall anpassen.
muhtor
Beiträge: 5
Registriert: Mo, 10.06.2013 12:12

Re: Zählen und Auswerten

Beitrag von muhtor »

Vielen Dank für die schnellen Antworten...

Ich werde es heute Abend mal versuchen einzubauen und melde mich ob es funktioniert hat...
muhtor
Beiträge: 5
Registriert: Mo, 10.06.2013 12:12

Re: Zählen und Auswerten

Beitrag von muhtor »

Hallo liebe Helfer,

anbei nochmal mein jetzt angepasster SQL text...
Wie das geschulte auge sieht funktioniert es nicht :D und ich finde leider keine erklärung könnte mir jemand auf die Sprünge helfen...

Zum Verständnis er soll mir ausgeben wie viele Datensätze nach der Abfrage vorhanden sind und wieviele davon richtig sind bedingung dafür ist:
da & Grün = Richtig
nicht da & rot = Richtig

jeweils einmal eine Summe für Grün bzw Gruen und Rot...

Ist es Möglich in der SQL Abfrage auch mit Umlauten zu arbeiten so das ich in meiner Tabelle Wertung weiterhin den Wert Grün verwenden kann da ich dies leider nicht bedacht habe bei der Datenbank erstellung (in die Ecke geh und schäm) oder ist es möglich im Formular es einfach als Grün darzustellen und dann als Gruen zu hinterlegen?

Vielen Dank schon mal wieder für die Hilfe

euer Muhtor

Code: Alles auswählen

SELECT 
"Bewerber-ID" AS "Bewerber-ID",
 "Nachname" AS "Nachname",
 "Vorname" AS "Vorname",
 "Datum" AS "Datum",
 "Beo1" AS "Beobachter",
 "Beo1wer" AS "Wertung", 
 "Beo1bem" AS "Bemerkung",
 "Beo2" AS "Beobachter",
 "Beo2wer",
 "Beo2bem" AS "Bemerkung",
 "Projekt" AS "Projekt",
 "da" AS "da",
 SUM( "1" ) AS "Anzahl Datensätze",
 SUM( CASE WHEN "Beo1" = :Beobachter AND "Beo1wer" = "Gruen" OR "Beo2" = :Beobachter AND "Beo2wer" = "Gruen" THEN 1 ELSE 0 END ) AS "Datensätze Grün",
 SUM( CASE WHEN "Beo1" = :Beobachter AND "Beo1wer" = "Gelb" OR "Beo2" = :Beobachter AND "Beo2wer" = "Gelb" THEN 1 ELSE 0 END ) AS "Datensätze Gelb",
 SUM( CASE WHEN "Beo1" = :Beobachter AND "Beo1wer" = "rot" OR "Beo2" = :Beobachter AND "Beo2wer" = "rot" THEN 1 ELSE 0 END ) AS "Datensätze Rot",
 SUM( CASE WHEN "da" = True THEN 1 ELSE 0 END ) AS "Datensätze ja",
 SUM( CASE WHEN "Datensätze Grün" = 1 AND "da" = True THEN 1 ELSE 0 END ) AS "Grün richtig",
 SUM( CASE WHEN "Datensätze rot" = 1 AND "da" = False THEN 1 ELSE 0 END ) AS "Rot richtig"
 FROM "Bewerbungen"
 WHERE ( "Beo1" LIKE :Beobachter OR "Beo2" LIKE :Beobachter ) ORDER BY "Bewerber-ID" ASC, "Nachname" ASC, "Vorname" ASC
RobertG
********
Beiträge: 2068
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zählen und Auswerten

Beitrag von RobertG »

Hallo muhtor,

das kann schon allein deswegen nicht funktionieren, weil Summen oder Anzahlen oder irgendwelche sonstigen Funktionen nur zusammen mit gruppierten Felder möglich sind. Deswegen noch einmal der Hinweis, dass Du mit Subselects besser zum Ziel kommst, wenn Du die Gruppierungen nicht einbauen kannst.
Außerdem arbeitest Du zusätzlich noch mit Parametern. Da funktioniert die Einstellung "SQL-Kommando direkt ausführen" nicht, die Dir DPunch vorgeschlagen hat. Bei den vorgeschlagenen Funktionen ist diese Einstellung allerdings auch nicht nötig (zumindest hier unter LO 3.3.4).

Gruß

Robert
muhtor
Beiträge: 5
Registriert: Mo, 10.06.2013 12:12

Re: Zählen und Auswerten

Beitrag von muhtor »

Hallo RobertG,

vielen Dank für den Hinweis nochmal...

Habe jetzt wie folgt umgebaut bekomme aber wieder einen Syntax fehler und verzweifle langsam...

Code: Alles auswählen

SELECT
 "Bewerber-ID" AS "Bewerber-ID",
 "Nachname" AS "Nachname",
 "Vorname" AS "Vorname",
 "Datum" AS "Datum",
 "Beo1" AS "Beobachter",
 "Beo1wer" AS "Wertung",
 "Beo1bem" AS "Bemerkung",
 "Beo2" AS "Beobachter",
 "Beo2wer",
 "Beo2bem" AS "Bemerkung",
 "Projekt" AS "Projekt",
 "da" AS "da",
(Select Count "Beo1wer" From "Bewerbungen" Where "Beo1" = :Beobachter, Where "Beo1wer" = 'Gruen', Where "da" = true) As "Richtig Gruen") From "Bewerbungen"
 ORDER BY "Bewerber-ID" ASC
Könntest du mir ein funktionierendes Beispiel zeigen damit ich damit weiter arbeiten kann? Dies wäre sehr net von dir...
RobertG
********
Beiträge: 2068
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zählen und Auswerten

Beitrag von RobertG »

Hallo muhtor,

ich ändere einmal schnell den Code an der Stelle, an der mehrere Fehler stecken.

Code: Alles auswählen

SELECT
 "Bewerber-ID" AS "Bewerber-ID",
 "Nachname" AS "Nachname",
 "Vorname" AS "Vorname",
 "Datum" AS "Datum",
 "Beo1" AS "Beobachter",
 "Beo1wer" AS "Wertung",
 "Beo1bem" AS "Bemerkung",
 "Beo2" AS "Beobachter",
 "Beo2wer",
 "Beo2bem" AS "Bemerkung",
 "Projekt" AS "Projekt",
 "da" AS "da",
(Select Count ("Beo1wer") From "Bewerbungen" Where "Beo1" = :Beobachter AND "Beo1wer" = 'Gruen' AND "da" = true) As "Richtig Gruen"
 From "Bewerbungen"
 ORDER BY "Bewerber-ID" ASC
Wenn ich zum Abend Zeit habe schaue ich mir noch einmal Deinen eventuellen Kommentar dazu an.

Gruß

Robert
muhtor
Beiträge: 5
Registriert: Mo, 10.06.2013 12:12

Re: Zählen und Auswerten

Beitrag von muhtor »

Hallo liebe Gemeinde,

ich hab mich jetzt soweit über ein Makro an das ganze herangearbeitet jetzt scheiter ich aber an einer sehr einfachen aufgabe und zwar das erstellen einer Hilfstabelle... Und zwar möchte ich eine Tabelle erstellen mit 3 spalten die mit einer Zahl befüllt werden soll.
Der folgende Code gibt den Fehler:
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Unexpeted token: INTEGER in Statement [CREATE TABLE "TEST" ("gruen" "INTEGER"].

Code: Alles auswählen

"CREATE TABLE ""Test"" "+CHR(40)+CHR(34)+"gruen"+CHR(34)+" "+CHR(34)+"INTEGER"+CHR(34)+CHR(44)+CHR(34)+"rot"+CHR(34)+CHR(34)+"INTEGER"+CHR(44)+CHR(34)+"gesamt"+CHR(34)+CHR(34)+"INTEGER"+CHR(34)++CHR(41)+CHR(59)
Das Löschen der Tabelle voher über:

Code: Alles auswählen

"DROP TABLE "+CHR(34)+Test+CHR(34)+" IF EXISTS"
Funktioniert dabei aber ohne Probleme...
RobertG
********
Beiträge: 2068
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zählen und Auswerten

Beitrag von RobertG »

Hallo muhtor,
muhtor hat geschrieben: Message: Unexpeted token: INTEGER in Statement [CREATE TABLE "TEST" ("gruen" "INTEGER"].
Da liegt der Haken in den ganzen verschiedenen CHR-Anweisungen. "INTEGER" soll doch kein Feld sein, sondern die Eigenschaft des Feldes. Da gehören dann keine doppelten Anführungszeichen hin. Ich mache das einmal an einem Beispiel, wie so etwas in Basic dann auszusehen hat:

Code: Alles auswählen

CREATE TABLE "Test" ("ID" INT PRIMARY KEY, "Text" VARCHAR(50))
wird zu

Code: Alles auswählen

"CREATE TABLE ""Test"" (""ID"" INT PRIMARY KEY, ""Text"" VARCHAR(50))"
Anführungsstriche maskierst Du einfach mit Anführungsstrichen.
Was die ganzen anderen CHR(...) sollen ist mir unklar.

Gruß

Robert
Antworten