Seite 1 von 2

Rechnen mit Sume aus Daten und Zählwert

Verfasst: Sa 29. Okt 2016, 21:48
von Moerser01
Hallo ,

ich brauche schon wieder Eure Hilfe. Nach dem ich aus meiner Tabelle die Urzeiten zusammen gerechnet und Subtrahiert habe und aus einer anderen Tabelle Werte abgezogen habe, muß ich noch die Anzahl aus aus einer Spalte abziehen. Aber ich komme leider nicht weiter. Ich habe es auch schon mit "Abfrage als Bezugstabelle "probiert. Leider ohne Erfolg.
Soweit geht alles

Code: Alles auswählen

SELECT COUNT( "Gesamtdaten"."PauseVon" ) AS "Anzahl", SUM( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 - "tbl_ma"."SollArbeit" / 1440.00000 ) AS "Überstunden" FROM "Gesamtdaten", "tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL )
aber mir fehlt noch die Multiplikation mit "tbl_ma"."SollArbeit Also etwa so:


SELECT COUNT( "Gesamtdaten"."PauseVon" ) AS "Anzahl", SUM( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 -"tbl_ma"."SollArbeit" / 1440.00000 * COUNT( "Gesamtdaten"."PauseVon" ) ) AS "GesamtÜberstunden" FROM "Gesamtdaten", "tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL )

Vielleicht währe jemand der ein Lösung für mich hat, auch so nett mir zu erklähren was gemacht werden muß und warum. Ich denke das der Ansatz mit der Bezugstabelle nicht so falsch ist. Aber das hat eben auch nicht funktioniert.

Gruß Moerser01

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 08:59
von RobertG
Hallo Moerser01,
Moerser01 hat geschrieben: SELECT COUNT( "Gesamtdaten"."PauseVon" ) AS "Anzahl", SUM( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 -"tbl_ma"."SollArbeit" / 1440.00000 * COUNT( "Gesamtdaten"."PauseVon" ) ) AS "GesamtÜberstunden" FROM "Gesamtdaten", "tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL )
Das, was Du da machst, ist für mich völlig undurchsichtig: Du multiplizierst die "SollArbeit" mit der "Anzahl" - soll das so sein? Außerdem fehlt wieder die Beziehungsdefinition zwischen "Gesamtdaten" und "tbl_ma": AND "Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma".

Dann versuchst Du außerdem noch, eine Funktion innerhalb einer anderen Funktion auszuführen: Count() innerhalb von Summe().

Vielleicht meinst Du ja das hier:

Code: Alles auswählen

SELECT COUNT( "Gesamtdaten"."PauseVon" ) AS "Anzahl", SUM( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000) - (COUNT( "Gesamtdaten"."PauseVon" ) *"tbl_ma"."SollArbeit" / 1440.00000)  AS "GesamtÜberstunden" FROM "Gesamtdaten", "tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL ) AND "Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma"
Gruß

Robert

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 12:10
von Moerser01
Hallo Robert. Du hast Recht wieder habe ich die Beziehung vergessen. Aber leider habe ich immer noch ein Syntexfehler drin. Der kommt immer wenn ich count in die Berechnung einbeziehen. Und ja ich muss die Anzahl mit der Stundenanzahl multiplizieren .Weil er sonst nur einmal 8 Stunden abzieht. Deshalb zähle ich die Felder in dem ein Wert steht und multipliziere ihn mit der Anzahl. Weil aber jeder einen andere Stundensatz hat muß ich SollArbeit rechnen.

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 14:55
von Moerser01
Oder kann man Ein-SpaltigeSQL-Befehle nicht mit Mehr-Spaltige- Befehle vermischen.

Vielleicht weil sonst könnte ich ja auch die Summe aus den berechneten Überstundennehmen.

Code: Alles auswählen

SELECT( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 - "tbl_ma"."SollArbeit" / 1440.00000 ) AS "Überstunden" FROM "Gesamtdaten","tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL ) AND "Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma"


Gruß Moerser01

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 17:30
von RobertG
Hallo Moerser01,

hast Du Dir einmal den alternativen Code in meinem Beitrag angesehen? Da steht COUNT() nicht innerhalb von SUM(). Zumindest gibt der Code keine Fehlermeldung bei der DB raus, die Du bei einem vorherigen Thread dazu ins Netz gestellt hat.

Gruß

Robert

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 18:26
von Moerser01
Ja habe ich probiert. Zeigt aber Fehler an
Habe noch mal rum probiert.
Also als erstes funktioniert der Code

Code: Alles auswählen

SELECT SUM( DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 - "tbl_ma"."SollArbeit" / 1440.00000 ) AS "Überstunden" FROM "Gesamtdaten", "tbl_ma" WHERE ( "Datum" >= :qVON OR :qVON IS NULL ) AND ( "Datum" <= :qBIS OR :qBIS IS NULL ) AND ( LOWER ( "ma_ID" ) LIKE LOWER ( :qma_ID || '%' ) OR :qma_ID IS NULL ) AND "Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma"
So ganz gut, aber ich bekomme den Filter nicht in mein Formular.

Und AND "Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma" funktioniert bei mir auch nicht sondern
"Gesamtdaten"."ma_ID" = "tbl_ma"."ID_ma"

Ich glaub ich muß dir mal meine Datenbank schicken.

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 19:13
von RobertG
Hallo Moerser01,
Moerser01 hat geschrieben:Ich glaub ich muß dir mal meine Datenbank schicken.
Mach' das.

Gruß

Robert

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 19:41
von Moerser01
Ok
Schau dir bitte mal das Suche- Formular an.
da will ich die Überstunden für den gewählten Zeitraum anzeigen lassen. Abfragefunktioniert ist integriert aber ich bekomme es nicht in den Filter rein.
Danke.

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 20:27
von RobertG
Hallo Moerser01,

wenn Du bereits eine Filtertabelle angelegt hast, dann machen Parameterabfragen für mich keinen Sinn mehr - es sei denn, Du willst die Parameter unabhängig von der Filtertabelle irgendwo anders nutzen.

Deine Abfrage geht auch so, ohne dass Du Parameter benötigst:

Code: Alles auswählen

SELECT "Gesamtdaten"."Datum", "Gesamtdaten"."Von", "Gesamtdaten"."Bis", "tbl_ma"."SollArbeit", DATEDIFF( 'minute', "Gesamtdaten"."Von", "Bis" ) / 1440.00000 AS "Anwesenheit", "Gesamtdaten"."PauseVon", "Gesamtdaten"."PauseBis", DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 AS "Pause", DATEDIFF( 'minute', "Von", "Bis" ) / 1440.00000 - DATEDIFF( 'minute', "PauseVon", "PauseBis" ) / 1440.00000 - "tbl_ma"."SollArbeit" / 1440.00000 AS "Überstunden", "tbl_zeittyp"."Zeittyp" FROM "Gesamtdaten", "tbl_ma", "tbl_zeittyp" WHERE "Datum" >= IFNULL((SELECT "VON" FROM "T_FILTER" WHERE "ID_F" = TRUE),"Datum") AND "Datum" <= IFNULL((SELECT "BIS" FROM "T_FILTER" WHERE "ID_F" = TRUE),"Datum") AND "ma_ID" = IFNULL((SELECT "ma_ID" FROM "T_FILTER" WHERE "ID_F" = TRUE),"ma_ID") AND "Gesamtdaten"."ma_ID" = "ID_ma" AND "Gesamtdaten"."zeittyp_ID" = "tbl_zeittyp"."ID_zeittyp"
Dann kannst Du das Unterformular ganz nach oben ziehen und auch dieses Konstrukt mit einem Formular, das nur auf einer Abfrage beruht, getrost beiseite legen.
Ähnlich würde ich bei anderen Abfragen vorgehen. Da scheinen ja noch mehr in dem Formular genau die gleichen Parameter zu benötigen.

Gruß

Robert

Re: Rechnen mit Sume aus Daten und Zählwert

Verfasst: So 30. Okt 2016, 21:10
von Moerser01
Danke funktioniert super.
Versteh ich das richtig du hast den T-filter in die Formel direkt eingebaut und das kann ich immer so machen so das ich mir das Verknüpfen im Formular erspare?

Danke und Schönen Sonntag noch.

PS:Als nächste werde ich mich ans Dimbox schreiben machen.