Liebe Profis, abfragezeit kürzen und einige Probleme

Technic1965

Mitglied
Liebe Profis, als Anfänger habe diese Abfrage erstellt, nur ist mir diese zu lang (Wartezeit für das Ergebnis) und würde auch gerne vermeiden gleiche Daten mehrmals einzugeben(Datum und Mitarbeiter Nummer), habe aber auch nicht geschafft die Arbeitstage anzuzeigen, bekomme immer Einträge für jeden einzelnen tag, mein abfrage Editor zeigt mir für diesen Zeitraum 26 Zeilen an, richtig, ich hätte aber als Ergebnis nur die Arbeitstage, an denen auch eine Leistung erbracht worden ist das wäre 23, wäre für jede Hilfe dankbar.
Hier auch ein Screenshot.

upload_2017-7-23_15-22-55.png
upload_2017-7-23_15-23-38.pngupload_2017-7-23_15-24-8.pngupload_2017-7-23_15-24-57.png

Hier meine Werk:



SELECT


Date_Format
(davidw2000._mtbl_leist.lsdate, '%m/%Y') AS LeistungsMonat,
Date_Format(davidw2000._mtbl_leist.lsdate, '%d.%m.%Y') AS LeistungsDatum,
davidw2000._sys_anrede.Text AS Anrede,
davidw2000._mtbl_stammdaten.mavname AS Vorname,
davidw2000._mtbl_stammdaten.maname AS Name,
COUNT(davidw2000._mtbl_leist.lsdate) AS Anzahl_Arbeitstage_im_Zeitraum, /*Ergebniss müsste 23 sein, also die Anzahl der Arbeitstage, nicht die Einträge des Tages */




/*----------------------Beginn Gesammtstunden im Zeitraum in min.---------------------------------------*/

ROUND((SELECT

IfNull(Sum(davidw2000._mtbl_leistunterricht.dauer), 0)

FROM
davidw2000._mtbl_leistunterricht
LEFT JOIN davidw2000._mtbl_leist ON davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistunterricht.id_flleist
LEFT JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.manummer
WHERE
davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND

davidw2000._mtbl_stammdaten.manummer = 5
GROUP BY

davidw2000._mtbl_stammdaten.manummer)) /*Theorieunterrichtsstunden im Zeitraum */

+
ROUND((SELECT

IfNull(SUM(davidw2000._kde_LeistPruefungPraxis.lsdauer), 0)

FROM
davidw2000._kde_LeistPruefungPraxis
INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_LeistPruefungPraxis.id_kdleist
INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
WHERE
davidw2000._kde_LeistPruefungPraxis.id_fsklnr IN ('13','27','50','51','53','15','52') AND

davidw2000._kde_LeistPruefungPraxis.isUnterschrift = TRUE AND

davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59' AND

davidw2000._mtbl_stammdaten.manummer = 5
GROUP BY

davidw2000._mtbl_stammdaten.manummer )) /*Prüfungsunterrichtsstunden im Zeitraum */

+
ROUND((SELECT

IfNull(SUM(davidw2000._kde_leistfahrstunden.lsdauer), 0)

FROM
davidw2000._kde_leistfahrstunden
INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist
INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
WHERE
davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','27','50','51','53','15','52') AND

davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND

davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59' AND

davidw2000._mtbl_stammdaten.manummer = 5
GROUP BY

davidw2000._mtbl_stammdaten.manummer )) AS Gesammtstunden_im_Zeitraum, /*Fahrstundenstunden im Zeitraum */


/*--------------------------------------Beginn Fahrstunden MOFA------------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('27'))) AS Mofa,

/*------------------------------------Beginn Fahrstunden Motorrad KLasse AM----------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('50'))) AS Fahrstunden_AM,

/*--------------------------Beginn Fahrstunden Motorrad KLasse A1--------------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13'))) AS Fahrstunden_A1,

/*-------------------------Beginn Fahrstunden Motorrad KLasse A-A2-------------------------------------*/

Sum((SELECT

IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('51','53'))) AS Fahrstunden_A_A2,

/*-----------------------------------Beginn Fahrstunden Pkw KLasse B-----------------------------------*/

SUM((SELECT

IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('15'))) AS Fahrstunden_B,

/*----------------------Beginn Fahrstunden Anhänger KLasse BE---------------------------------------------*/

Sum((SELECT

IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('52'))) AS Fahrstunden_BE,

/*------------------------------Beginn Prüfung Motorrad KLasse AM----------------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0)

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('50'))) AS PraxPruefung_AM,

/*-----------------------------Beginn Prüfung Motorrad KLasse A1----------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0)

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN('13'))) AS PraxPruefung_A1,

/*-------------------------Beginn Prüfung Motorrad KLasse A - A2--------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0)

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('51','53'))) AS PraxPruefung_A_A2,

/*----------------Beginn Praxis Prüfung Pkw-Anhänger Klasse B-BE------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0)

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('15','52'))) AS PraxPruefung_BBE,

/*--------------------Beginn Theorieunterricht Fahrlehrer-----------------------------------------------------*/

IFNULL(Sum(DISTINCT davidw2000._mtbl_leistunterricht.dauer),0) AS Theorie,

/*-----------------Beginn Unterschriebene Versäumte Fahrstunden ----------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leist.id_lsart = 18 AND

davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','27','50','51','53','15','52'))) AS Fahrstunde_Versaeumt,

/*--------------------------Beginn Fehlende Unterschriften-----------------------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0)

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = False AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','50','51','53','15','52')))

+
Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0)

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = False AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','27','50','51','53','15','52'))) AS Unterschrift_fehlt,

/*--------------------------------Beginn Tages Gesammt Arbeitszeit-------------------------------------------*/

Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer),0) /*Unterschriebene Praxis Prüfungsleistungen*/

FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','50','51','53','15','52')))

+
Sum((SELECT

IFNULL(Sum(davidw2000._kde_leistfahrstunden.lsdauer),0) /*Unterschriebene Fahrstunden*/

FROM
davidw2000._kde_leistfahrstunden
WHERE
davidw2000._kde_leistfahrstunden.isUnterschrift = True AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist AND

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','27','50','51','53','15','52')))

+
IfNull(Sum(DISTINCT davidw2000._mtbl_leistunterricht.dauer),0) AS GesammtArbeitsZeit,

/*--------------------Beginn Erste Bestandene Praxis Prüfung Anzahl Alle Motorrad------------------------*/

Count(DISTINCT (SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('Prüfung') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('1') AND

davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','50','51','53'))) AS Erste_PraxPruefung_Motorrad,

/*----------------Beginn Zweite Bestandene Praxis Prüfung Anzahl Alle Motorrad----------------------*/

Count(DISTINCT (SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('WH Prüfung') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('1') AND

davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','50','51','53'))) AS Zweite_PraxPruefung_Motorrad,

/*----------------------Beginn Nichtbestandene Praxis Prüfung Anzahl Motorrad-----------------------------*/

Count((SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('Praxis','Prüfung','WH Prüfung','WH Praxis') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('2','3','4','5') AND

/*davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND*/
davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','27','50','51','53'))) AS PraxPruefung_Ohne_Erfolg_Motorrad,

/*---------------------Beginn Erste Bestandene Praxis Prüfung Anzahl B-BE------------------------*/

Count(DISTINCT (SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('Prüfung') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('1') AND

davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('15','52'))) AS Erste_PraxPruefung_BBE,

/*------------------------Beginn Zweite Bestandene Praxis Prüfung B-BE-----------------------------------*/

COUNT((SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('WH Prüfung') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('1') AND

davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND

davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('15','52'))) AS Zweite_PraxPruefung_BBE,

/*----------------------Beginn Nichtbestandene Praxis Prüfung Anzahl BBE---------------------------*/

Count((SELECT

davidw2000._kde_leistpruefungpraxis.bezeichnung
FROM
davidw2000._kde_leistpruefungpraxis
WHERE
davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('Praxis','Prüfung','WH Prüfung','WH Praxis') AND

davidw2000._kde_leistpruefungpraxis.id_prstatus IN ('2','3','4','5') AND

davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND
davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist AND

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('15','52'))) AS PraxPruefung_Ohne_Erfolg_BBE,

/*------------------------Beginn Sonstige Leistung Urlaub-----------------------------------------------------*/

CASE WHEN

(Sum((SELECT

IFNULL(Sum(davidw2000._mtbl_leistsonstiges.lsdauer),0)

FROM
davidw2000._mtbl_leistsonstiges
WHERE
davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistsonstiges.id_flleist AND

davidw2000._mtbl_leistsonstiges.id_lsart IN ('38')))) > '0'
THEN 'U'
ELSE '-'
END AS Urlaub,

/*-------------------------------Beginn Sonstige Leistung Feiertag--------------------------------------*/

CASE WHEN

(Sum((SELECT

IFNULL(Sum(davidw2000._mtbl_leistsonstiges.lsdauer),0)

FROM
davidw2000._mtbl_leistsonstiges
WHERE
davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistsonstiges.id_flleist AND

davidw2000._mtbl_leistsonstiges.id_lsart IN ('42')))) > '0'
THEN 'F'
ELSE '-'
END AS Feiertag,

/*--------------------------Beginn Sonstige Leistung Krank---------------------------------------------*/

CASE WHEN

(Sum((SELECT

IFNULL(Sum(davidw2000._mtbl_leistsonstiges.lsdauer),0)

FROM
davidw2000._mtbl_leistsonstiges
WHERE
davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistsonstiges.id_flleist AND

davidw2000._mtbl_leistsonstiges.id_lsart IN ('40')))) > '0'
THEN 'K'
ELSE '-'
END AS Krank,

/*----------------------------Beginn Sonstige Leistung Sonstiges-----------------------------*/

CASE WHEN

(Sum((SELECT

IFNULL(Sum(davidw2000._mtbl_leistsonstiges.lsdauer),0)

FROM
davidw2000._mtbl_leistsonstiges
WHERE
davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistsonstiges.id_flleist AND

davidw2000._mtbl_leistsonstiges.id_lsart IN ('34','39')))) > '0'
THEN 'S'
ELSE '-'
END AS Sonstiges,

/*--------------------------------------------------------------------------------------------------------*/

/*--------------------STUNDENVERGÜTUNG-------------------------------------------------------------*/

(SELECT
(davidw2000._mtbl_flverguetung.prpreis)

FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
INNER JOIN davidw2000._mtbl_bruttolohnliste ON davidw2000._mtbl_stammdaten.id_nrblist = davidw2000._mtbl_bruttolohnliste.plnummer
INNER JOIN davidw2000._mtbl_flverguetung ON davidw2000._mtbl_bruttolohnliste.id_nrblist = davidw2000._mtbl_flverguetung.id_nrblist
WHERE
davidw2000._mtbl_stammdaten.manummer = 5 AND

davidw2000._mtbl_flverguetung.id_fsklnr IN ('27') AND

davidw2000._mtbl_bruttolohnliste.plstatus = 1 AND

davidw2000._mtbl_flverguetung.id_fznr IN ('14','24')

GROUP BY

davidw2000._mtbl_stammdaten.id_nrblist) AS Verguetung_MOFA,

/*-----------------------------------------*/

(SELECT
(davidw2000._mtbl_flverguetung.prpreis)

FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
INNER JOIN davidw2000._mtbl_bruttolohnliste ON davidw2000._mtbl_stammdaten.id_nrblist = davidw2000._mtbl_bruttolohnliste.plnummer
INNER JOIN davidw2000._mtbl_flverguetung ON davidw2000._mtbl_bruttolohnliste.id_nrblist = davidw2000._mtbl_flverguetung.id_nrblist
WHERE
davidw2000._mtbl_stammdaten.manummer = 5 AND

davidw2000._mtbl_flverguetung.id_fsklnr IN ('50') AND

davidw2000._mtbl_bruttolohnliste.plstatus = 1 AND

davidw2000._mtbl_flverguetung.id_fznr IN ('8')

GROUP BY

davidw2000._mtbl_stammdaten.id_nrblist) AS Verguetung_AM,

/*-----------------------------------------*/

(SELECT
(davidw2000._mtbl_flverguetung.prpreis)

FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
INNER JOIN davidw2000._mtbl_bruttolohnliste ON davidw2000._mtbl_stammdaten.id_nrblist = davidw2000._mtbl_bruttolohnliste.plnummer
INNER JOIN davidw2000._mtbl_flverguetung ON davidw2000._mtbl_bruttolohnliste.id_nrblist = davidw2000._mtbl_flverguetung.id_nrblist
WHERE
davidw2000._mtbl_stammdaten.manummer = 5 AND

davidw2000._mtbl_flverguetung.id_fsklnr IN ('13','51','53') AND

davidw2000._mtbl_bruttolohnliste.plstatus = 1 AND

davidw2000._mtbl_flverguetung.id_fznr IN ('21','22','28')

GROUP BY

davidw2000._mtbl_stammdaten.id_nrblist) AS Verguetung_A_A2_A1,

/*-----------------------------------------*/

(SELECT
(davidw2000._mtbl_flverguetung.prpreis)

FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar
INNER JOIN davidw2000._mtbl_bruttolohnliste ON davidw2000._mtbl_stammdaten.id_nrblist = davidw2000._mtbl_bruttolohnliste.plnummer
INNER JOIN davidw2000._mtbl_flverguetung ON davidw2000._mtbl_bruttolohnliste.id_nrblist = davidw2000._mtbl_flverguetung.id_nrblist
WHERE
davidw2000._mtbl_stammdaten.manummer = 5 AND

davidw2000._mtbl_flverguetung.id_fsklnr IN ('15','16','52') AND

davidw2000._mtbl_bruttolohnliste.plstatus = 1 AND

davidw2000._mtbl_flverguetung.id_fznr = davidw2000._mtbl_stammdaten.id_fznr
GROUP BY

davidw2000._mtbl_stammdaten.id_nrblist) AS Verguetung_B_BE,


/*----------------------------ARBEITSSTUNDENAUFSTELLUNG--------------------------------------------------*/

/*-------------------------Beginn Zeitraum Fahrstunden MOFA-------------------------------------------------*/

(SELECT

IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)


FROM

davidw2000._kde_leistfahrstunden

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('27') AND


davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45 AS Zeitraum_MOFA,

/*-------------Beginn Zeitraum Prüfungen und Fahrstunden Motorad KLasse AM-------------------------------*/

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)


FROM

davidw2000._kde_leistfahrstunden

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('50') AND


davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45)


+

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer), 0)


FROM

davidw2000._kde_leistpruefungpraxis

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('50') AND


davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45) AS Zeitraum_Fahrstunden_AM,

/*------------Beginn Zeitraum Prüfungen und Fahrstunden Motorad KLasse A - A2-------------------------*/

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)


FROM

davidw2000._kde_leistfahrstunden

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','51','53') AND


davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45)


+

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer), 0)


FROM

davidw2000._kde_leistpruefungpraxis

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','51','53') AND


davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45) AS Zeitraum_Fahrstunden_A_A2,

/*----------------Beginn Zeitraum Prüfungen und Fahrstunden Pkw KLasse B----------------------------------*/

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer), 0)


FROM

davidw2000._kde_leistpruefungpraxis

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('15','52') AND


davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45)


+

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)


FROM

davidw2000._kde_leistfahrstunden

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('15','52') AND


davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45) AS Zeitraum_Fahrstunden_B,

/*-----------Beginn Zeitraum Gesammt Unterrichtstunden (Theorie und Praxis)-----------------------*/

ROUND((SELECT


IfNull(Sum(davidw2000._mtbl_leistunterricht.dauer), 0)


FROM

davidw2000._mtbl_leistunterricht

LEFT JOIN davidw2000._mtbl_leist ON davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistunterricht.id_flleist

LEFT JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.manummer

WHERE

davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45)


+

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistfahrstunden.lsdauer), 0)


FROM

davidw2000._kde_leistfahrstunden

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistfahrstunden.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistfahrstunden.is_fsklnr IN ('13','27','50','51','53','15','52') AND


davidw2000._kde_leistfahrstunden.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45)


+

ROUND((SELECT


IfNull(Sum(davidw2000._kde_leistpruefungpraxis.lsdauer), 0)


FROM

davidw2000._kde_leistpruefungpraxis

INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist

INNER JOIN davidw2000._mtbl_leist ON davidw2000._kde_leist.id_flleist = davidw2000._mtbl_leist.id_flleist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

WHERE

davidw2000._kde_leistpruefungpraxis.id_fsklnr IN ('13','27','50','51','53','15','52') AND


davidw2000._kde_leistpruefungpraxis.isUnterschrift = TRUE AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45) AS Gesammt_Theorie_Praxis,




/*----------------------Beginn Zeitraum Theorie-----------------------------------------------------*/

ROUND((SELECT


IfNull(Sum(davidw2000._mtbl_leistunterricht.dauer), 0)


FROM

davidw2000._mtbl_leistunterricht

LEFT JOIN davidw2000._mtbl_leist ON davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistunterricht.id_flleist

LEFT JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.manummer

WHERE

davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 00:00:00' AND


davidw2000._mtbl_stammdaten.manummer = 5

GROUP BY


davidw2000._mtbl_stammdaten.manummer)/45) AS Zeitraum_Theorie




/*---------------------------------------------------------------------------------------------------*/

FROM

davidw2000._mtbl_leist

INNER JOIN davidw2000._mtbl_stammdaten ON davidw2000._mtbl_leist.id_nrmitar = davidw2000._mtbl_stammdaten.id_mitar

INNER JOIN davidw2000._sys_anrede ON davidw2000._mtbl_stammdaten.id_anrnr = davidw2000._sys_anrede.id_anrnr

LEFT JOIN davidw2000._kde_leist ON davidw2000._mtbl_leist.id_flleist = davidw2000._kde_leist.id_flleist

LEFT JOIN davidw2000._mtbl_leistunterricht ON davidw2000._mtbl_leist.id_flleist = davidw2000._mtbl_leistunterricht.id_flleist

WHERE

davidw2000._mtbl_stammdaten.manummer = 5 AND


davidw2000._mtbl_leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59'

GROUP BY


davidw2000._mtbl_stammdaten.manummer,

davidw2000._mtbl_leist.lsdate

upload_2017-7-23_15-22-55.png upload_2017-7-23_15-23-38.png upload_2017-7-23_15-24-8.png upload_2017-7-23_15-24-57.png
 
Moin Technic1965,

zwei Rückfragen zu deinem Resultset-Aufbau:

a) du möchtest ja irgendwo die tatsächlichen Arbeitstage (diese 23 = 26 abzgl. krank/Feiertag) angezeigt bekommen.
Wäre es nicht einfacher, diese Information mit in die 1. Spalte LeistungmMonat zu setzen in der Form "06/2017 (23 Arbeitstage)"?
b) die Spalte "Arbeitsstunden in Zeitraum) ist doch ebenso redundant wie falsch berechnet. Willst du da nicht die ArbeitsMINUTEN je TAG, also das, was in der jeweiligen Zeile an Gesamt-Minute. berechnet werden kann? Ansonsten erschliesst sich mir nicht, wie du in einem Monat (~30 Tage) * 24 Std (wenn ihr wenig Pausen macht auf 9090 gesamtstunden im Monat kommen kannst.

Grüße
Biber
 
Hi Biber,

hab mich gefreut das sich jemand es angeschaut hat :)
Also, ich versuche mir einen Gehaltsnachweis für meine Fahrlehrer hinzu bekommen, also Fahrschule, bei uns gibt es 45 min, Einheiten, ich möchte Anfang und Ende Datum und Mitarbeiternummer eingeben. :)
Also wie ich auf die Zeit komme: in der Tabelle _mtbl_leist werden alle Leistungen gespeichert, es gibt nur Einträge für Fahrstunden, für Prak Prüfungsstunden, Theorie und Sonstiges(Feiertag, Urlaub, Krank), Tage an denen keins von diesen ist, wird auch kein Datum gespeichert, es gibt aber an einem tag mehrere Arbeitstundeneinträge, die lasse ich nach Tag zusammenrechnen dann habe ich auch in diesem Zeitraum (angegebener Monat) Summiert kommt 9090 min, das ist die Summe der Fahrstunden, Fahrprüfungen, und der Theorieunterrichte, durch 45 habe ich die monatliche Stundenzahl( keine 60 min stunden sondern 45 min :) ) wo ich mich schwer tue ist, würde gerne am letzten Arbeitstag vor dem Urlaub, Feiertag oder Krank 13 Wochen (entspricht 78 Tage, 6 Tage die Woche 78 Tage zurück) den Durchschnitt der Arbeitszeiten berechnen, sollte auch für jeden Tag anderer Durchschnitt rauskommen.

Außerdem sehe ich das die Abfrage langsamer wird, würde die gerne kombinieren, brauche also einen Ansatz.
Habe ich eigentlich mich jetzt richtig ausgedrückt? das problem ist das ich die db nicht rausrücken kann:) aber es sieht so aus ich brauche Professionelle Hilfe, möchte aber auch was selber tun :)

Für weitere Fragen bin ich gerne da :)

Grüsse
Technic
 
Moin Technic1965,

na ja, ich interpretiere deine Antwort mal so, dass du in der jetzigen Spalte "Gesamtstunden_im_Zeitraum" oder auch "Fahrstunden_B" nicht Stunden, sondern Minuten ausweist.

Denn ich wüsste nicht, wie dein Fahrlehrer "Andr.Sch" in einem Monat >9000 Stunden leisten kann oder allein am 1.6.2017 lockere 360 "Fahrstunden_B" abgerissen hat.

Die beklagenswerte Geschwindigkeit der Abfrage kommt sicherlich durch die vielen INLINE- und SubSelects zustande.
mal sehen, vielleciht komme ich in den nächsten Tagen mal dazu, das ein bisschen umzumuddeln.

Eine der wenigen Stellen in deinem Statement, wo tatsächlich ein Inline-Select Sinn machen würde (aber nicht benutzt wird) ist genau diese Stelle mit den "tatsächlichen Arbeitstagen".

Da hast du ja momentan die Zeile

SQL:
SELECT ...
 < bla, vorname, nachname.., .>
   COUNT(davidw2000._mtbl_leist.lsdate) AS Anzahl_Arbeitstage_im_Zeitraum,

--  <drei Meter tiefer dann... )

GROUP BY
 davidw2000._mtbl_stammdaten.manummer,
 davidw2000._mtbl_leist.lsdate

Das heisst, du zählst immer die "Arbeitstage" als Anzahl der vorhanden Einträge in der "Leist"-Tabelle für diesen Mitarbeiter an diesem Tag.

Statt dieser COUNT-Zeile würde wahrscheinlich bessere Ergebnisse bringen ein

SQL:
SELECT ...
 < bla, vorname, nachname.., .>

, ( SELECT COUNT( DISTINCT lsdate)
     FROM davidw2000._mtbl_leist as l
       WHERE  l.id_nrmitar = 5 AND
  l.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59'
,
....
Also ein "Zähle die vorhandenen unterschiedlichen Datumswerte in der Leistungs-Tabelle für diesen Mitarbeiter im angegebenen Zeitraum")


Wobei ich auch noch nicht durchschaut habe, wie denn bei euch die Abgrenzung "Feiertag" <->"Arbeitstag" sein soll

Einerseits hat der Mitarbeiter "Nr 5" natürlich an den Tagen "gearbeitet", an denen er eine Leistung eintragen hat (also Fahrstunde oder Theorie oder was ein Fahrlehrer so der Menschheit geben kann).
Er kann auch an einem Datum "Krank" sein oder seine bezahlten "Urlaub" nehmen.
Auch das zählt als Arbeitstag, sehe ich genauso.

Aber wieso zählt bei euch ein "Feiertag" zu den Arbeitstagen??

Grüße
Biber
 
upload_2017-7-24_23-9-12.png
Arbeitstage der letzten 13 Wochen, Feiertage, Urlaub und Kranktage sind nicht mit gezählt, aber immer 13 Wochen zurückgerechnet vom 01.06.2017, hätte gerne aber eine Auflistung z.B: ist der Mitarbeiter am 03.06 krank, Urlaub oder Feiertag dann sollte der durchschnitt vom 02.06 anfangen letzte 13 Wochen Tagesarbeitsdurchschnitt berechnen, geht er am 18.06 dann ist der letzte Arbeitstag der 17.06 dann letzte 13 Wochen vom 17 ten zurück.

(SELECT COUNT(DISTINCT davidw2000._mtbl_leist.lsdate)
FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_flleist=davidw2000._mtbl_leist.id_flleist
INNER JOIN davidw2000._kde_leistfahrstunden ON davidw2000._kde_leistfahrstunden.id_kdleist=davidw2000._kde_leist.id_kdleist
WHERE
davidw2000._mtbl_leist.lsdate BETWEEN (SELECT DATE_SUB('2017-06-01 00:00:00', INTERVAL 13 WEEK)) AND '2017-06-01 00:00:00' AND
davidw2000._kde_leistfahrstunden.lsdauer > 0 ) Arbeitstage
 
Zuletzt bearbeitet:
das habe ich schon hinbekommen, noch eine frage, wie bekomme ich das hin das ich die anfrage hier so einfüge das es lesbar ist, bei mir sieht das hier aus wie ein Worddoc. :)

[ code=sql ] -- ohne leerzeichen nach und vor den Klammern
Dein Code
[/code]

SQL:
(SELECT COUNT(DISTINCT davidw2000._mtbl_leist.lsdate)
FROM
davidw2000._mtbl_leist
INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_flleist=davidw2000._mtbl_leist.id_flleist
INNER JOIN davidw2000._kde_leistfahrstunden ON davidw2000._kde_leistfahrstunden.id_kdleist=davidw2000._kde_leist.id_kdleist
WHERE
davidw2000._mtbl_leist.lsdate BETWEEN (SELECT DATE_SUB('2017-06-01 00:00:00', INTERVAL 13 WEEK)) AND '2017-06-01 00:00:00' AND
davidw2000._kde_leistfahrstunden.lsdauer > 0 )
 
Zurück