Hi nette Profis, kann ich diese Abfrage Optimieren

Hi Biber also dieses Statement läuft separat richtig und liefert mir auch die richtigen Ergebnisse also die Anzahl der Täglichen Prüfungen
SQL:
SELECT
   CASE WHEN X.PpAz_1_AM > 0 THEN x.PpAz_1_AM ELSE '-' END AS Pa_1_AM,
     CASE WHEN x.PpAz_1_A1 > 0 THEN x.PpAz_1_A1 ELSE '-' END AS Pa_1_A1,
     CASE WHEN x.PpAz_1_A > 0 THEN x.PpAz_1_A ELSE '-' END AS Pa_1_A,
     CASE WHEN x.PpAz_1_A2 > 0 THEN x.PpAz_1_A2 ELSE '-' END AS Pa_1_A2,
     CASE WHEN x.PpAz_1_B > 0 THEN x.PpAz_1_B ELSE '-' END AS Pa_1_B,
     CASE WHEN x.PpAz_1_BE > 0 THEN x.PpAz_1_BE ELSE '-' END AS Pa_1_BE,
   
   CASE WHEN x.PpAz_2_AM > 0 THEN x.PpAz_2_AM ELSE '-' END AS Pa_2_AM,
     CASE WHEN x.PpAz_2_A1 > 0 THEN x.PpAz_2_A1 ELSE '-' END AS Pa_2_A1,
     CASE WHEN x.PpAz_2_A > 0 THEN x.PpAz_2_A ELSE '-' END AS Pa_2_A,
     CASE WHEN x.PpAz_2_A2 > 0 THEN x.PpAz_2_A2 ELSE '-' END AS Pa_2_A2,
     CASE WHEN x.PpAz_2_B > 0 THEN x.PpAz_2_B ELSE '-' END AS Pa_2_B,
     CASE WHEN x.PpAz_2_BE > 0 THEN x.PpAz_2_BE ELSE '-' END AS Pa_2_BE,
 
   CASE WHEN x.PpAz_0 > 0 THEN x.PpAz_0 ELSE '-' END AS Pp_ohne_erfolg    
 
 FROM(
/* Anfang Erste Bestandene Prüfung*/
 SELECT
   CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_AM,
           
   CASE WHEN lppru.id_fsklnr = 13 AND 
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE 
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A1,
   
   CASE WHEN lppru.id_fsklnr = 51 AND 
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_1_A,
           
   CASE WHEN lppru.id_fsklnr = 53 AND 
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A2,
 
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_B,
   
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_BE,
               
/* Anfang Zweite Bestandene Prüfung*/       
     CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_AM,
           
   CASE WHEN lppru.id_fsklnr = 13 AND 
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A1,
   
   CASE WHEN lppru.id_fsklnr = 51 AND 
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A,
           
   CASE WHEN lppru.id_fsklnr = 53 AND 
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_A2,
 
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_B,
   
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE  
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_BE,
       
/* Anfang Erste und Zweite Nicht Bestandene Prüfung*/
     CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16) AND
             lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 2 AND
                 lppru.isUnterschrift = TRUE 
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_0       
     
FROM davidw2000._mtbl_leist AS leist
inner JOIN davidw2000._kde_leist AS lkde ON leist.id_flleist = lkde.id_flleist
INNER JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lkde.id_kdleist = lppru.id_kdleist
     

WHERE leist.id_nrmitar = 3
AND  leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59'
GROUP BY
leist.lsdate
ORDER BY
leist.lsdate DESC) AS x[SQL]

Bildlich sieht das so aus
upload_2017-8-22_14-46-5.png

sieht aber Anfänger mäßig aus und müsste diesen auch in das vorherige einbinden, aber dann bekomme ich die Anzahl nicht.
habe noch etwas zusammen gereimt, die funktioniert, aber dauert lange und alles mehrmals geschrieben

Also hier mal alles komplett, leider bekomme ich nicht die richtige Anzahl der Prüfungen.
SQL:
SELECT 
       Date_Format(DATE_SUB(x.lsdate, INTERVAL 13 Week), '%d.%m.%Y') AS 13_Wochen_vor_Ldatum, 
   Date_Format(x.lsdate, '%d.%m.%Y') AS Ldatum,
       Anr.Text AS Anrede,
       stamm.mavname AS Vorname,
       stamm.maname AS Name,   
       
                     
  CASE WHEN 
       (SELECT SUM(ltheo.dauer)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist    
        Where l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar) > 0 
  Then
     (SELECT Ifnull(SUM(ltheo.dauer),0)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist
        WHERE l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar)
  ELSE '-' 
  END AS Theorie,
       
     CASE WHEN x.sumFahrs_Mofa = 0 THEN '-' ELSE x.sumFahrs_Mofa END AS Fahrs_Mofa,
     CASE WHEN x.sumFahrs_AM = 0 THEN '-' ELSE x.sumFahrs_AM END AS Fahrs_AM,
     CASE WHEN x.sumFahrs_A1 = 0 THEN '-' ELSE x.sumFahrs_A1 END AS Fahrs_A1,
     CASE WHEN x.sumFahrs_A = 0 THEN '-' ELSE x.sumFahrs_A END AS Fahrs_A,
     CASE WHEN x.sumFahrs_A2 = 0 THEN '-' ELSE x.sumFahrs_A2 END AS Fahrs_A2,  
     CASE WHEN x.sumFahrs_B = 0 THEN '-' ELSE x.sumFahrs_B END AS Fahrs_B,
     CASE WHEN x.sumFahrs_BE = 0 THEN '-' ELSE x.sumFahrs_BE END AS Fahrs_BE,
     CASE WHEN x.sumFahrs_B96 = 0 THEN '-' ELSE x.sumFahrs_B96 END AS Fahrs_B96,
  
     CASE WHEN x.sumPPru_AM = 0 THEN '-' ELSE x.sumPPru_AM END AS Prax_AM,
     CASE WHEN x.sumPPru_A1 = 0 THEN '-' ELSE x.sumPPru_A1 END AS Prax_A1,
     CASE WHEN x.sumPPru_A = 0 THEN '-' ELSE x.sumPPru_A END AS Prax_A,
     CASE WHEN x.sumPPru_A2 = 0 THEN '-' ELSE x.sumPPru_A2 END AS Prax_A2,  
     CASE WHEN x.sumPPru_B = 0 THEN '-' ELSE x.sumPPru_B END AS Prax_B,
     CASE WHEN x.sumPPru_BE = 0 THEN '-' ELSE x.sumPPru_BE END AS Prax_BE,
     
     CASE WHEN X.PpAz_1_AM > 0 THEN x.PpAz_1_AM ELSE '-' END AS Pa_1_AM,
     CASE WHEN x.PpAz_1_A1 > 0 THEN x.PpAz_1_A1 ELSE '-' END AS Pa_1_A1,
     CASE WHEN x.PpAz_1_A > 0 THEN x.PpAz_1_A ELSE '-' END AS Pa_1_A,
     CASE WHEN x.PpAz_1_A2 > 0 THEN x.PpAz_1_A2 ELSE '-' END AS Pa_1_A2,  
     CASE WHEN x.PpAz_1_B > 0 THEN x.PpAz_1_B ELSE '-' END AS Pa_1_B,
     CASE WHEN x.PpAz_1_BE > 0 THEN x.PpAz_1_BE ELSE '-' END AS Pa_1_BE,
     
   CASE WHEN x.PpAz_2_AM > 0 THEN x.PpAz_2_AM ELSE '-' END AS Pa_2_AM,
     CASE WHEN x.PpAz_2_A1 > 0 THEN x.PpAz_2_A1 ELSE '-' END AS Pa_2_A1,
     CASE WHEN x.PpAz_2_A > 0 THEN x.PpAz_2_A ELSE '-' END AS Pa_2_A,
     CASE WHEN x.PpAz_2_A2 > 0 THEN x.PpAz_2_A2 ELSE '-' END AS Pa_2_A2,  
     CASE WHEN x.PpAz_2_B > 0 THEN x.PpAz_2_B ELSE '-' END AS Pa_2_B,
     CASE WHEN x.PpAz_2_BE > 0 THEN x.PpAz_2_BE ELSE '-' END AS Pa_2_BE,
   CASE WHEN x.PpAz_0 > 0 THEN x.PpAz_0 ELSE '-' END AS Pp_ohne_erfolg ,
     
     CASE WHEN x.sumFahrs_Versaeumt > 0 THEN x.sumFahrs_Versaeumt ELSE '-' END AS Fahrs_Versaeumt,
     CASE WHEN x.sumPPruU_fehlt + x.sumFahrsU_fehlt > 0 THEN (x.sumPPruU_fehlt + x.sumFahrsU_fehlt) ELSE '-' END AS Uschrift_fehlt,  
  
  CASE WHEN
     (SELECT Ifnull(SUM(ltheo.dauer),0)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist
        WHERE l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar)+(x.sumFahrs_TagG)+(x.sumPPru_TagG) = 0
  THEN '-'
  ELSE 
        (SELECT Ifnull(SUM(ltheo.dauer),0)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist
        WHERE l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar)+(x.sumFahrs_TagG)+(x.sumPPru_TagG)
  END AS LTagG,
  
         
  CASE WHEN x.sumBu > 0 THEN x.sumBu ELSE '-' END AS Buro, 
  CASE WHEN x.sumPa > 0 THEN x.sumPa ELSE '-' END AS Pause,
  CASE WHEN x.sumSo > 0 THEN x.sumSo ELSE '-' END AS Sonstiges,      
  CASE WHEN x.sumUr > 0 THEN 'U' ELSE '-' END AS Urlaub,
  CASE WHEN x.sumKr > 0 THEN 'K' ELSE '-' END AS Krank,
  CASE WHEN x.SumFe > 0 THEN 'F' ELSE '-' END AS Feiertag

FROM (

/* inneres SELECT: alle Summenwerte aus einem SELECT von Tabelle "leist" mit allen ihren Childs */

SELECT  leist.id_nrmitar,
        leist.lsdate, 
    
   

    
    
    
    
                   

/*Fahrstundenleistungen*/ 
  SUM(CASE WHEN lfahrs.is_fsklnr = 27
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_Mofa,
    
  SUM(CASE WHEN lfahrs.is_fsklnr = 50
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_AM,
    
  SUM(CASE WHEN lfahrs.is_fsklnr = 13
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_A1,
    
  SUM(CASE WHEN lfahrs.is_fsklnr = 51
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_A,
  
  SUM(CASE WHEN lfahrs.is_fsklnr = 53
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_A2,
    
  SUM(CASE WHEN lfahrs.is_fsklnr = 15
    THEN lfahrs.lsdauer
  ELSE 0 END ) AS sumFahrs_B,
  
  SUM(CASE WHEN lfahrs.is_fsklnr = 16
     THEN lfahrs.lsdauer
   ELSE 0 END ) AS sumFahrs_BE,
    
  SUM(CASE WHEN lfahrs.is_fsklnr = 52
     THEN lfahrs.lsdauer
   ELSE 0 END ) AS sumFahrs_B96,
   
  SUM(CASE WHEN lfahrs.lsdauer > 0
     THEN lfahrs.lsdauer
   ELSE 0 END ) AS sumFahrs_TagG,   
   
/*PraxisPrüfungsleistungen*/   
  SUM(CASE WHEN lppru.id_fsklnr = 50
    THEN lppru.lsdauer
  ELSE 0 END ) AS sumPPru_AM,
    
  SUM(CASE WHEN lppru.id_fsklnr = 13
    THEN lppru.lsdauer
  ELSE 0 END ) AS sumPPru_A1,
    
  SUM(CASE WHEN lppru.id_fsklnr = 51
    THEN lppru.lsdauer
  ELSE 0 END ) AS sumPPru_A,
  
  SUM(CASE WHEN lppru.id_fsklnr = 53
    THEN lppru.lsdauer
  ELSE 0 END ) AS sumPPru_A2,
    
  SUM(CASE WHEN lppru.id_fsklnr = 15
       THEN lppru.lsdauer
  ELSE 0 END) AS sumPPru_B,
    
  SUM(CASE WHEN lppru.id_fsklnr = 16
     THEN lppru.lsdauer
   ELSE 0 END ) AS sumPPru_BE,
   
  SUM(CASE WHEN lppru.lsdauer > 0
     THEN lppru.lsdauer
   ELSE 0 END ) AS sumPPru_TagG,   
   
   
  SUM(CASE WHEN lkde.id_lsart = 18
       AND lfahrs.isUnterschrift = False 
     THEN lfahrs.lsdauer
   ELSE 0 END ) AS sumFahrs_Versaeumt, 
   
  SUM(CASE WHEN lppru.isUnterschrift = False
   THEN lppru.lsdauer
   ELSE 0 END ) AS sumPPruU_fehlt, 
   
  SUM(CASE WHEN lfahrs.isUnterschrift = False
   THEN lfahrs.lsdauer
   ELSE 0 END ) AS sumFahrsU_fehlt,
   CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_AM, 
             
   CASE WHEN lppru.id_fsklnr = 13 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE   
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A1,  
     
   CASE WHEN lppru.id_fsklnr = 51 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_1_A,
             
   CASE WHEN lppru.id_fsklnr = 53 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A2,
  
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_B,
     
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_BE,
                 
/* Anfang Zweite Bestandene Prüfung*/         
     CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_AM, 
             
   CASE WHEN lppru.id_fsklnr = 13 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A1,  
     
   CASE WHEN lppru.id_fsklnr = 51 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A,
             
   CASE WHEN lppru.id_fsklnr = 53 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_A2,
  
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_B,
     
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_BE,
         
/* Anfang Erste und Zweite Nicht Bestandene Prüfung*/
     CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16) AND
             lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE   
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_0 ,   
       
   
/*Sonstigeleistungen*/      
  SUM(CASE WHEN lsonst.id_lsart = 30
       THEN lsonst.lsdauer
       ELSE 0 END ) AS sumBu,
       
  SUM(CASE WHEN lsonst.id_lsart = 36
       THEN lsonst.lsdauer
       ELSE 0 END ) AS sumPa,
       
  SUM(CASE WHEN lsonst.id_lsart = 34
       THEN lsonst.lsdauer
       ELSE 0 END ) AS sumSo,
    
  SUM(CASE WHEN lsonst.id_lsart = 38
       THEN lsonst.lsdauer
       ELSE 0 END ) AS sumUr,
  
  SUM(CASE WHEN lsonst.id_lsart = 40
       THEN lsonst.lsdauer
       ELSE 0 END ) AS SumKr,
    
  SUM(CASE WHEN lsonst.id_lsart = 42
       THEN lsonst.lsdauer
       ELSE 0 END ) AS SumFe

FROM davidw2000._mtbl_leist AS leist

/*
-- weitere JOINs .. (hier nicht wesentlich)
-- LEFT JOIN davidw2000._kde_leist...
-- LEFT JOIN davidw2000._mtbl_leistunterricht
*/
 

LEFT JOIN davidw2000._kde_leist AS lkde ON lkde.id_flleist = leist.id_flleist
LEFT JOIN davidw2000._mtbl_leistsonstiges AS lsonst ON lsonst.id_flleist = leist.id_flleist
LEFT JOIN davidw2000._kde_leistfahrstunden AS lfahrs  ON lkde.id_kdleist = lfahrs.id_kdleist AND lfahrs.isUnterschrift = True
LEFT JOIN  davidw2000._kde_leistpruefungpraxis AS lppru ON lkde.id_kdleist = lppru.id_kdleist AND lppru.isUnterschrift = True

/*INNER JOIN  davidw2000._kde_leistpruefungpraxis AS PPcount ON kdecount.id_kdleist = PPcount.id_kdleist AND PPcount.isUnterschrift = True*/

WHERE leist.id_nrmitar = 3
AND  leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-31 23:59:59'
GROUP BY
leist.lsdate
ORDER BY
leist.lsdate DESC) AS x


INNER JOIN davidw2000._mtbl_stammdaten AS Stamm ON x.id_nrmitar = Stamm.id_mitar
INNER JOIN davidw2000._sys_anrede      AS Anr   ON Stamm.id_anrnr = Anr.id_anrnr[SQL]

Währe also die Tabellen Verbindung Inner Join, dann würde es funktionieren, wenn ich das aber ändere dann funktionier anderer teil nicht, also nur für die Count abfragen benötige ich INNER JOIN für die
"LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lkde.id_kdleist = lppru.id_kdleist AND lppru.isUnterschrift = True"
sonst LEFT JOIN, ich hoffe das ich es diesmal erklären konnte.
 

Anhänge

  • upload_2017-8-22_14-43-47.png
    upload_2017-8-22_14-43-47.png
    298 KB · Aufrufe: 6
  • upload_2017-8-22_14-45-42.png
    upload_2017-8-22_14-45-42.png
    298 KB · Aufrufe: 3
Zuletzt bearbeitet von einem Moderator:
Na ja,

ich sehe den Unterschied schon - beim INNER JOIN bekommst du natürlich nur die 7 Tage, an denen auch auch eine Wiederhol-Prüfung stattfand, ausgegeben (Leider lässt du den Tag nicht mit ausgeben; das macht den direkten Vergleich schwieriger).
Aber du willst doch diese Ergebnisse mit in der anderen Auswertung ausgeben, und diese andere Liste ist doch so strukturiert, dass alle Tage, an denen ein Fahrlehrer irgendwelche Buchungen hatte, aufgeführt werden.

Wenn du jetzt in der neuen Abfrage (der mit INNER JOIN) das Datum lsdate mit anzeigen lässt und dabei z.B am 17.Juni. 2 Wh-Prüfungen xy angezeigt werden, dann sollten diese doch genau mit einem LEFT JOIN in der ersten Abfrage (wie in meinem Beispiel von Sonntag mit SUM(CASE WHEN...END) ) für genau diesen Tag herauskommen.

Was NICHT funktionieren kann, ist eine Änderung in der alten Abfrage auf INNER JOIN, da gebe ich dir recht.

Das Problem, was ich vermeiden will, ist folgendes:
Mit der tippaufwendigen Strategie mit innerem Select für Summierung und Pivotierung und einem äußeren Select für die optisch-ästhetische Aufhübschung kommen wir mit genau einer Stelle aus, an der die WHERE-Bedingung eingetippt/geändert werden muss. Und es wird an der frühest möglichen Stelle gefiltert auf EINEN Mitarbeiter und EINEN Monat (oder Zeitraum).

Wenn wir, was die Alternative wäre, ein paar Hilfsviews bauen
- einen View für Summierung/Pivotierung von _kde_leistfahrstunden/_mtbl_leistsonstiges (= altes inneres SELECT)
- einem View für Summierung/Pivotierung von _kde_leistpruefungpraxis (dein neues Statement)
-> dann sollten in beiden Views die Felder lsdate/id_nrmitar enthalten sein, weil die Views über diese beiden Felder verjoint werden müssen (das ist unproblematisch)
-> aber: beide Views würden jeweils die Werte über ALLE Mitarbeiter und ALLE Zeiträume berechnen müssen , da die WHERE-Bedingung erst nach dem JOIN der Views erfolgen kann (in den Views kann keine WHERE Klausel sein)

Dazu sollten wir aber erstmal auf alle Tabellen, die ein lsdate und eine Mitarbeiter-Nummer enthalten, einen Non-Unique-Index auf diese Feldkombination anlegen und prüfen, wie lange so eine Abfrage "über alles" braucht (also z.B. deine neue Abfrage MIT Anzeige von Datum und Mitarbeiter GROUP BY Datum und Mitarbeiter OHNE ORDER BY und vor allem OHNE WHERE-Klausel).

Noch mal: ich bin immer noch überzeugt davon, dass wir auch mit dem vorhanden LEFT JOIN weiterkommen,
Bitte lass mal in deinem neuen Statement das Datum mit anzeigen, damit wir wenigstens die Werte/die Abweichungen eines bestimmtes Tages vergleichen können.

Grüße
Biber
[Edit]
zu dem "in den Views kann keine WHERE Klausel sein"
Natürlich KANN in einem View eine WHERE-Klausel sein. Aber bei einer Änderung der WHERE-Bedingung muss jedesmal der View gedropped/neu angelegt werden. das ist nicht praktibel.
[/Edit]
 
Zuletzt bearbeitet:
Hi Biber,
gerne mache ich den Ablauf weiter wie du es empfählst, da ich ja auch was davon lerne, hier erstmal das was du sehen wolltest, wenn dieses mit left join funktionieren würde wäre es toll, also ich poste mal erst das funktionierende teil für die Prüfungsanzahl
SQL:
SELECT
   Date_Format(x.lsdate, '%d.%m.%Y') AS Ldatum,
   
   CASE WHEN X.PpAz_1_AM > 0 THEN x.PpAz_1_AM ELSE '-' END AS Pa_1_AM,
     CASE WHEN x.PpAz_1_A1 > 0 THEN x.PpAz_1_A1 ELSE '-' END AS Pa_1_A1,
     CASE WHEN x.PpAz_1_A > 0 THEN x.PpAz_1_A ELSE '-' END AS Pa_1_A,
     CASE WHEN x.PpAz_1_A2 > 0 THEN x.PpAz_1_A2 ELSE '-' END AS Pa_1_A2, 
     CASE WHEN x.PpAz_1_B > 0 THEN x.PpAz_1_B ELSE '-' END AS Pa_1_B,
     CASE WHEN x.PpAz_1_BE > 0 THEN x.PpAz_1_BE ELSE '-' END AS Pa_1_BE,
     
   CASE WHEN x.PpAz_2_AM > 0 THEN x.PpAz_2_AM ELSE '-' END AS Pa_2_AM,
     CASE WHEN x.PpAz_2_A1 > 0 THEN x.PpAz_2_A1 ELSE '-' END AS Pa_2_A1,
     CASE WHEN x.PpAz_2_A > 0 THEN x.PpAz_2_A ELSE '-' END AS Pa_2_A,
     CASE WHEN x.PpAz_2_A2 > 0 THEN x.PpAz_2_A2 ELSE '-' END AS Pa_2_A2, 
     CASE WHEN x.PpAz_2_B > 0 THEN x.PpAz_2_B ELSE '-' END AS Pa_2_B,
     CASE WHEN x.PpAz_2_BE > 0 THEN x.PpAz_2_BE ELSE '-' END AS Pa_2_BE,
   
   CASE WHEN x.PpAz_0 > 0 THEN x.PpAz_0 ELSE '-' END AS Pp_ohne_erfolg     
 FROM(
/* Anfang Erste Bestandene Prüfung*/ 
 SELECT
 leist.lsdate,
   CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_AM,
             
   CASE WHEN lppru.id_fsklnr = 13 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE   
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A1, 
     
   CASE WHEN lppru.id_fsklnr = 51 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_1_A,
             
   CASE WHEN lppru.id_fsklnr = 53 AND   
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_A2,
 
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_B,
     
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('Praxis','Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_1_BE,
                 
/* Anfang Zweite Bestandene Prüfung*/         
     CASE WHEN lppru.id_fsklnr = 50 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_AM,
             
   CASE WHEN lppru.id_fsklnr = 13 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A1, 
     
   CASE WHEN lppru.id_fsklnr = 51 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END AS PpAz_2_A,
             
   CASE WHEN lppru.id_fsklnr = 53 AND   
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_A2,
 
     CASE WHEN lppru.id_fsklnr = 15 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_B,
     
     CASE WHEN lppru.id_fsklnr = 16 AND
             lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 1 AND
                 lppru.isUnterschrift = TRUE    
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_2_BE,
         
/* Anfang Erste und Zweite Nicht Bestandene Prüfung*/
     CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16) AND
             lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung') AND
                 lppru.id_prstatus = 2 AND
                 lppru.isUnterschrift = TRUE   
         THEN COUNT(lppru.bezeichnung)
         ELSE 0 END  AS PpAz_0         
       
FROM davidw2000._mtbl_leist AS leist
INNER JOIN davidw2000._kde_leist AS lkde ON leist.id_flleist = lkde.id_flleist
INNER JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lkde.id_kdleist = lppru.id_kdleist
[sql]

upload_2017-8-22_23-54-25.png

upload_2017-8-22_23-55-28.png

So muss das Ergebnis aussehen
upload_2017-8-23_0-45-30.png

So Fehlt eine Anzahl also die 2 Ohne Erfolg am 17.08.2017
upload_2017-8-23_0-47-52.png

hier fehlt wieder eine 08.08.2017 ohne erfolg
upload_2017-8-23_0-50-43.png

und hier ist die fehlende am 08.08.2017
upload_2017-8-23_0-51-44.png

Was ich nicht verstehe ist, das Zeiten in Min übermit Left Join funktionieren

SQL:
LEFT JOIN davidw2000._kde_leistfahrstunden AS lfahrs ON lkde.id_kdleist = lfahrs.id_kdleist
LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lppru.id_kdleist = lkde.id_kdleist
[sql]
wenn ich aber die Anzahl möchte muss ich mit INNER Join verbinden, obwohl die gleiche Tabelle, nur nicht die Summe sondern COUNT
[Code=SQL]INNER JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lppru.id_kdleist = lkde.id_kdleist[sql]

[Code=sql]
SUM(CASE WHEN lppru.id_fsklnr = 15
AND lppru.isUnterschrift = TRUE
THEN lppru.lsdauer
ELSE 0 END) AS sumPPru_B,[sql]

[Code=sql]
CASE WHEN lppru.id_fsklnr = 15 AND
lppru.bezeichnung IN ('WH Praxis','WH Prüfung') AND
lppru.id_prstatus = 1 AND
lppru.isUnterschrift = TRUE
THEN COUNT(lppru.bezeichnung)
ELSE 0 END AS PpAz_2_B,
[sql]
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

einmal nerve ich noch mit dem "es muss einfach mit LEFT JOIN funktionieren", danach probieren wir was anderes.

Was mir auffiel:
a) bei dem Bild überschrieben mit "So muss es aussehen" fragst du den Mitarbeiter 1 ab; bei dem Bild darunter miskommentiertet "hier fehlt der soundsovielte August" fragst du Mitarbeiter 3 ab?

b) unabhängig davon: bitte versuche die Pivotierung nach dem selben Schema wie wir es bei den Stunden gemacht haben und wie ich es weiter oben vorschlug.

Also ersetze (NUR bei einem einzigen Fall erstmal) das auskommentierte durch das darunter stehende.
Is' sich auch der letzte Versuch...

SQL:
...
END  AS PpAz_2_BE,
         
/* Deine Summenberechnung Anfang Erste und Zweite Nicht Bestandene Prüfung*/
-- nur diesen einen Fall anpassen
--     CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16) AND
--             lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung') AND
--                 lppru.id_prstatus = 2 AND
--                 lppru.isUnterschrift = TRUE  
--         THEN COUNT(lppru.bezeichnung)
--         ELSE 0 END  AS PpAz_0       
/* Meine Summenberechnung Anfang Erste und Zweite Nicht Bestandene Prüfung*/

     Sum(CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16)
         AND lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung')
         AND lppru.id_prstatus = 2 AND lppru.isUnterschrift = TRUE  
         THEN 1
         ELSE 0 END)  AS PpAz_0       

       
FROM davidw2000._mtbl_leist AS leist
INNER JOIN davidw2000._kde_leist AS lkde ON leist.id_flleist = lkde.id_flleist
LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lppru ON lkde.id_kdleist = lppru.id_kdleist
..

Is' mir ja auch langsam peinlich, dass ich nich' ma ein paar Prüfungen zusammenzählen kann.

Grüße
Biber
 
einmal nerve ich noch mit dem "es muss einfach mit LEFT JOIN funktionieren", danach probieren wir was anderes.
Verdammt ;) es hat funktioniert, hat mir alles gezählt auch mit LEFT JOIN :)

mir fallen die Augen zu, morgen 07:30 Uhr Prüfung, danach habe ich paar Std. Zeit, dann schau ich mal, wo der Kampf weiter geht.
Herzlichen Dank SENSEI :)

Aber das wäre mir nicht eingefallen, lässt einfach die "1" Summieren, konnte es jetzt vielleicht nicht richtig kommentieren aber ich habe es verstanden, ohne Count() :):) Perfect

upload_2017-8-25_21-54-51.png upload_2017-8-25_22-0-58.png upload_2017-8-25_22-2-41.png Hi Biber,
soweit läuft alles gut, bei der Prüfungsanzahl möchte ich etwas ergänzen sonst lege ich mich selber rein mit dem was ich mache.
Also mit dieser Abfrage, bei der Prüfung oder Praxis Ergebnissen ist alles ok, bei WH Praxis oder WH Prüfung werden auch 2. 3. 4. 5. und auch weitere Prüfungen angezeigt auch wenn die Prüf beim 20. Anlauf bestanden wird, also sollte über die "id_kd" geprüft werden wie viele WH Praxis oder WH Prüfung der Kunde wiederholt hat, mehr als eine WH P sollte nicht unter "Pa_2_B" angezeigt werden sondern unter "Pp_ohne_erfolg" mitgezählt werden. Ich weiss ich nerve :(
SQL:
SELECT
       Date_Format(DATE_SUB(x.lsdate, INTERVAL 13 Week), '%d.%m.%Y') AS Wochen_13_vor_Ldatum,
   Date_Format(x.lsdate, '%d.%m.%Y') AS Ldatum,
       Anr.Text AS Anrede,
       stamm.mavname AS Vorname,
       stamm.maname AS Name,    
                     
  CASE WHEN
       (SELECT SUM(ltheo.dauer)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist  
        Where l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar) > 0
  Then
     (SELECT Ifnull(SUM(ltheo.dauer),0)
        FROM davidw2000._mtbl_leist AS l
        INNER JOIN davidw2000._mtbl_leistunterricht AS ltheo ON l.id_flleist = ltheo.id_flleist
        WHERE l.lsdate = x.lsdate
        AND l.id_nrmitar = x.id_nrmitar)
  ELSE '-'
  END AS Theorie,

     CASE WHEN x.PpAz_1_A2 > 0 THEN x.PpAz_1_A2 ELSE '-' END AS Pa_1_A2,
     CASE WHEN x.PpAz_1_B > 0 THEN x.PpAz_1_B ELSE '-' END AS Pa_1_B,
     
     CASE WHEN x.PpAz_2_B > 0 THEN x.PpAz_2_B ELSE '-' END AS Pa_2_B,
   CASE WHEN x.PpAz_0 > 0 THEN x.PpAz_0 ELSE '-' END AS Pp_ohne_erfolg
   
       
FROM (

SELECT  leist.id_nrmitar,
        leist.lsdate,

 SUM(CASE WHEN lppru.id_fsklnr = 53 
         AND lppru.bezeichnung IN ('Praxis','Prüfung')
             AND lppru.id_prstatus = 1
             AND lppru.isUnterschrift = True  
          THEN 1
 ELSE 0 END) AS PpAz_1_A2,
 
 SUM(CASE WHEN lppru.id_fsklnr = 15
         AND lppru.bezeichnung IN ('Praxis','Prüfung')
             AND lppru.id_prstatus = 1
             AND lppru.isUnterschrift = True  
          THEN 1
 ELSE 0 END) AS PpAz_1_B,
   
 
 SUM(CASE WHEN lppru.id_fsklnr = 15
         AND lppru.bezeichnung IN ('WH Praxis','WH Prüfung')
     AND lppru.id_prstatus = 1
       AND lppru.isUnterschrift = True  
          THEN 1
 ELSE 0 END) AS PpAz_2_B,

       
/* Anfang Erste und Zweite Nicht Bestandene Prüfung*/

  SUM(CASE WHEN lppru.id_fsklnr IN (50,13,51,53,15,16)
            AND lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung')
            AND lppru.id_prstatus = 2
    AND lppru.isUnterschrift = True
            THEN 1
   ELSE 0 END) AS PpAz_0
   


FROM davidw2000._mtbl_leist AS leist

   LEFT JOIN davidw2000._kde_leist AS lkde ON leist.id_flleist = lkde.id_flleist
   LEFT JOIN davidw2000._mtbl_leistsonstiges AS lsonst ON lsonst.id_flleist = leist.id_flleist
   LEFT JOIN davidw2000._kde_leistfahrstunden AS lfahrs  ON lkde.id_kdleist = lfahrs.id_kdleist
   LEFT JOIN  davidw2000._kde_leistpruefungpraxis AS lppru ON lppru.id_kdleist = lkde.id_kdleist
 
WHERE leist.id_nrmitar = 3
AND  leist.lsdate BETWEEN '2017-05-01 00:00:00' AND '2017-05-31 23:59:59'
GROUP BY
leist.lsdate
ORDER BY
leist.lsdate DESC) AS x

INNER JOIN davidw2000._mtbl_stammdaten AS Stamm ON x.id_nrmitar = Stamm.id_mitar
INNER JOIN davidw2000._sys_anrede      AS Anr   ON Stamm.id_anrnr = Anr.id_anrnr[sql]

[ATTACH=full]65234[/ATTACH]

Am 31.05.2017 wird unter Pa_2_B eine bestandene 2. WH Prüfung aufgeführt, was aber  nicht sein darf weil diese ist mehr als eine WH Prüf, diese sollte unter Pp_ohne Erfolg mit gezählt werden, füge auch die zwei wichtigen Tabellen auch ein

Tab1:  _kde_leist
[ATTACH=full]65235[/ATTACH]

Tab 2: _kde_LeistPruefungPraxis

[ATTACH=full]65236[/ATTACH]

In der ersten Abfrage bekomme ich die mehr als eine WH Prüfungen weg, wer eine WH hat wird und soll auch angezeigt werden, bekomme aber die mehr als eine WH Prüf nicht in die zweite rein, wo ist wieder der Wurm :(

SQL:
/* Mehr als eine Nicht bestandene ('WH Praxis','WH Prüfung') dürfen hier nicht angezeigt werden*/  
 SUM(CASE WHEN lppru.id_fsklnr = 15
         AND lppru.bezeichnung IN ('WH Praxis','WH Prüfung') 
     AND lppru.id_prstatus = 1
       AND lppru.isUnterschrift = True
    AND (
       SELECT Count(davidw2000._kde_leistpruefungpraxis.bezeichnung)
                       FROM davidw2000._kde_leistpruefungpraxis
                 INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist
                      WHERE davidw2000._kde_leistpruefungpraxis.id_prstatus = 1
                        AND davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('WH Praxis','WH Prüfung')) < 2   
            THEN 1
 ELSE 0 END) AS PpAz_2_B,

         
/* Anfang nicht bestandene ('Praxis','Prüfung') , Nicht bestandene ('WH Praxis','WH Prüfung'),  Mehr als eine Nicht bestandene ('WH Praxis','WH Prüfung')*/

  SUM(CASE WHEN lppru.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung')
            AND lppru.id_prstatus = 2
    AND lppru.isUnterschrift = True
    AND (
       SELECT Count(davidw2000._kde_leistpruefungpraxis.bezeichnung)
                       FROM davidw2000._kde_leistpruefungpraxis
                 INNER JOIN davidw2000._kde_leist ON davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist
                      WHERE davidw2000._kde_leistpruefungpraxis.id_prstatus = 1
                        AND davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('WH Praxis','WH Prüfung')) > 1  
            THEN 1
   ELSE 0 END) AS PpAz_0
[sql]
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

Da sollte doch reichen...

SQL:
..   CASE WHEN x.PpAz_2_B >= 1THEN 1 ELSE '-' END AS Pa_2_B,
CASE WHEN ...

Statt 1 kannst du ja auch ein Kreuzchen 'x' hinmalen.

Grüße
Biber
 
upload_2017-8-26_14-43-27.png
  • .. CASE WHEN x.PpAz_2_B >= 1THEN 1 ELSE '-' END AS Pa_2_B,
  • CASE WHEN ...
Geht leider nicht, kann ich denn nicht die Anzahl ('WH Prüfung','WH Praxis') zählen und wer mehr als eine WH gefahren ist soll nicht unter Pa_2_B, die möchte ich aber unter Pp_ohne_erfolg anzeigen
SQL:
( SELECT Count(davidw2000._kde_leistpruefungpraxis.bezeichnung)
FROM davidw2000._kde_leistpruefungpraxis
INNER JOIN davidw2000._kde_leist [B]ON[/B] davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist
WHERE davidw2000._kde_leistpruefungpraxis.bezeichnung IN ('WH Prüfung','WH Praxis')
AND davidw2000._kde_leistpruefungpraxis.id_nrmitar = x.id_nrmitar
AND davidw2000._kde_leist.id_kdleist = davidw2000._kde_leistpruefungpraxis.id_kdleist
AND davidw2000._kde_leist.id_kd = 1331) AS Anzahl_WH_Prüf_oder_WH_Prax,
[sql]
aber ich kann ja schlecht kd nummer manuel eingeben, dieser hatte 4 WH(mehr als eine WH 01.08.2017,  4. und fertig), wird leider unter Pa_2_B aufgeführt, soll aber nicht, sondern unter Pp_ohne_erfolg

[ATTACH=full]65237[/ATTACH][ATTACH=full]65237[/ATTACH] [ATTACH=full]65237[/ATTACH]

Ich versuche es mal anders zu erklären, also das was du zuletzt beschrieben hast geht leider nicht, bevor aufgelistet wird sollte nach geprüft werden wieviele WH Prüfungen der Kunde gefahren ist, bestandene erste WH Prüfung anzahl sollte gezählt werden, mehr als eine WH Prüf anzahl wird unter Prüf ohne erfolg gezählt werden also hier fehlt was :(

SQL:
SUM(CASE WHEN lppru.id_fsklnr = 15
         AND lppru.bezeichnung IN ('WH Praxis','WH Prüfung')
     AND lppru.id_prstatus = 1
       AND lppru.isUnterschrift = True   
            THEN 1
 ELSE 0 END) AS PpAz_2_B,[SQL]
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

ist mir nicht ganz klar.
Diese mehrfachen Wh-Prüfungen
- haben doch wohl nicht den id_prstatus=1, von dem ich annahm, er bedeutet 'bestanden'?
- gezählt werden sollen die Wh-Prüfungen als mehrfach nur, wenn sie auch beim selben Fahrlehrer waren? Und die nicht bestandenen Wh-Prüfungen können irgendwann gewesen sein, d.h. der Zeitraum ist irrelevant?

Ich war bisher davon ausgegangen, wir zählen ohnehin nur die bestandenen Prüfungen je Tag... haben wir gar kein Kriterium für bestanden/nicht bestanden?

Grüße
Biber
 
Richtig, nur die WH s müssen gezählt werden , die können irgendwann gewesen sein, Fahrlehrer und Zeitraum unwichtig, hat der Kunde mehr als eine WH soll als erfolglose Prüf gelistet werden, weil wenn Kunde 10. WH besteht wird er dann auch als bestandene WH angezeigt, das wäre falsch, deswegen soll nur WH Prüfungen auf Anzahl der abgelegten WH s geprüft werden, hatte auch die 2 Tabellenbilder gepostet

Moin Technic1965,

ist mir nicht ganz klar.
Diese mehrfachen Wh-Prüfungen
- haben doch wohl nicht den id_prstatus=1, von dem ich annahm, er bedeutet 'bestanden'?
- gezählt werden sollen die Wh-Prüfungen als mehrfach nur, wenn sie auch beim selben Fahrlehrer waren? Und die nicht bestandenen Wh-Prüfungen können irgendwann gewesen sein, d.h. der Zeitraum ist irrelevant?

Ich war bisher davon ausgegangen, wir zählen ohnehin nur die bestandenen Prüfungen je Tag... haben wir gar kein Kriterium für bestanden/nicht bestanden?

Grüße
Biber
Wollte ergänzen das nicht alle WH Prüfungen den den prstatus= 1 haben, nur wenn irgendwann WH bestanden ist, sonst immer 2 als Erfolglose WH

Außerdem ist der prstatus bei WH Prüfungen unwichtig 1 oder 2 , alle WHs des Kunden wird gezählt und sind es mehr als 1 WH gilt diese als erfolglos, das wird am Tag der Bestandenen WH also dann prstatus 1 geprüft, hat er mehr als eine WH dann als erfolglos auslisten, ist eine WH mit prstatus 1 dann unter 2. bestandene Prüfung.
 
Zuletzt bearbeitet von einem Moderator:
Na ja,

Dann ist tatsächlich die richtige Stelle zum Ändern das innere Select, Erweiterung der CASE WHEN-Bedingung so ähnlich wie in deinem Kommentar von 14:43h heute.

Also in etwa noch als Zusatz :
AND (SELECT COUNT (*)
FROM ...leistpruefungpraxis As lpp
INNER JOIN ...kde_leist kdl ON ....
WHERE lpp.Bezeichnung IN (...)
AND kdl.id_kd=lkde.id_kd) = 1

Mit anderen Worten: nur die Bezeichnung 'WH xy' und die id_kd des aktuellen lkde - Datensatzes sind die Kriterien.

Grüße
Biber
 
Zuletzt bearbeitet:
Zurück