Hi nette Profis, kann ich diese Abfrage Optimieren

Moin Technic1965,

wenn ich es richtig verstehe und "nur" die Spalte "Theorie" falsche Werte anzeigt, dann ändere mal den Anfang des Selects so:

SQL:
SELECT Anr.Text AS Anrede,
stamm.mavname AS Vorname,
stamm.maname AS Name,
Date_Format(x.lsdate, '%d.%m.%Y') AS Datum,
-- x.sumTheorie AS Theorie,
( 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
) as Theorie
, ...
..
FROM ( 
   <inneres Select> ) 
as x
...

Den Rest erstmal so lassen.
So sollten alle Theoriestunden für den Tag und den Mitarbeiter gefunden werden.

Grüße
Biber
 
Mittlerweile sieht es so aus auch mit der Theorie klappt es jetzt
SQL:
SELECT Date_Format(x.lsdate, '%d.%m.%Y') AS Datum,
Anr.Text AS Anrede,
stamm.mavname AS Vorname,
stamm.maname AS Name,
(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)AS Theorie,
CASE WHEN x.sumFahrs_Mofa > 0 THEN x.sumFahrs_Mofa ELSE '-' END AS Fahrs_Mofa,
CASE WHEN x.sumFahrs_AM > 0 THEN x.sumFahrs_AM ELSE '-' END AS Fahrs_AM,
CASE WHEN x.sumFahrs_A1 > 0 THEN x.sumFahrs_A1 ELSE '-' END AS Fahrs_A1,
CASE WHEN x.sumFahrs_A > 0 THEN x.sumFahrs_A ELSE '-' END AS Fahrs_A,
CASE WHEN x.sumFahrs_A2 > 0 THEN x.sumFahrs_A2 ELSE '-' END AS Fahrs_A2,
CASE WHEN x.sumFahrs_B > 0 THEN x.sumFahrs_B ELSE '-' END AS Fahrs_B,
CASE WHEN x.sumFahrs_BE > 0 THEN x.sumFahrs_BE ELSE '-' END AS Fahrs_BE,
CASE WHEN x.sumPraPru_AM > 0 THEN x.sumPraPru_AM ELSE '-' END AS Prax_AM,
CASE WHEN x.sumPraPru_A1 > 0 THEN x.sumPraPru_A1 ELSE '-' END AS Prax_A1,
CASE WHEN x.sumPraPru_A > 0 THEN x.sumPraPru_A ELSE '-' END AS Prax_A,
CASE WHEN x.sumPraPru_A2 > 0 THEN x.sumPraPru_A2 ELSE '-' END AS Prax_A2,
CASE WHEN x.sumPraPru_B > 0 THEN x.sumPraPru_B ELSE '-' END AS Prax_B,
CASE WHEN x.sumPraPru_BE > 0 THEN x.sumPraPru_BE ELSE '-' END AS Prax_BE,
CASE WHEN x.sumFahrs_Versaeumt > 0 THEN x.sumFahrs_Versaeumt ELSE '-' END AS Fahrs_Versaeumt,
CASE WHEN x.sumPraPruU_fehlt OR x.sumFahrsU_fehlt > 0 THEN ((x.sumPraPruU_fehlt)+(x.sumFahrsU_fehlt)) ELSE '-' END AS Uschrift_fehlt,
CASE WHEN x.sumFahrs_TagG OR x.sumPraPru_TagG > 0 THEN ((x.sumFahrs_TagG)+(x.sumPraPru_TagG)) ELSE '-' END AS Tag_Gesammt,
CASE WHEN x.sumUrlaub > 0 THEN 'U' ELSE '-' END AS Urlaub,
CASE WHEN x.sumKrank > 0 THEN 'K' ELSE '-' END AS Krank,
CASE WHEN x.SumFeiertag > 0 THEN 'F' ELSE '-' END AS Feiertag

FROM (

SELECT leist.id_nrmitar,
leist.lsdate,

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 = 52
THEN lfahrs.lsdauer
ELSE 0 END ) AS sumFahrs_BE,

SUM(CASE WHEN lfahrs.is_fsklnr IN ('13','27','50','51','53','15','52')
THEN lfahrs.lsdauer
ELSE 0 END ) AS sumFahrs_TagG,

SUM(CASE WHEN lprapru.id_fsklnr = 50
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_AM,

SUM(CASE WHEN lprapru.id_fsklnr = 13
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_A1,

SUM(CASE WHEN lprapru.id_fsklnr = 51
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_A,

SUM(CASE WHEN lprapru.id_fsklnr = 53
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_A2,

SUM(CASE WHEN lprapru.id_fsklnr = 15
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_B,

SUM(CASE WHEN lprapru.id_fsklnr = 52
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_BE,

SUM(CASE WHEN lprapru.id_fsklnr IN ('13','27','50','51','53','15','52')
THEN lprapru.lsdauer
ELSE 0 END ) AS sumPraPru_TagG,

SUM(CASE WHEN lkde.id_lsart = 18 AND
lfahrs.is_fsklnr IN ('13','27','50','51','53','15','52')
THEN lfahrs.lsdauer
ELSE 0 END ) AS sumFahrs_Versaeumt,

SUM(CASE WHEN lprapruUsF.id_fsklnr IN ('13','27','50','51','53','15','52')
THEN lprapruUsF.lsdauer
ELSE 0 END ) AS sumPraPruU_fehlt,

SUM(CASE WHEN lfahrsUsF.is_fsklnr IN ('13','27','50','51','53','15','52')
THEN lfahrsUsF.lsdauer
ELSE 0 END ) AS sumFahrsU_fehlt,

SUM(CASE WHEN lsonst.id_lsart = 38
THEN lsonst.lsdauer
ELSE 0 END ) AS sumUrlaub,

SUM(CASE WHEN lsonst.id_lsart = 40
THEN lsonst.lsdauer
ELSE 0 END ) AS SumKrank,

SUM(CASE WHEN lsonst.id_lsart = 42
THEN lsonst.lsdauer
ELSE 0 END ) AS SumFeiertag

FROM davidw2000._mtbl_leist AS leist



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 lprapru ON lkde.id_kdleist = lprapru.id_kdleist AND lprapru.isUnterschrift = True
LEFT JOIN davidw2000._kde_leistfahrstunden AS lfahrsUsF ON lkde.id_kdleist = lfahrsUsF.id_kdleist AND lfahrsUsF.isUnterschrift = False
LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lprapruUsF ON lkde.id_kdleist = lprapruUsF.id_kdleist AND lprapruUsF.isUnterschrift = False

WHERE leist.id_nrmitar = 1
AND leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-30 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

Hi Biber3,
Muss ich hier was ändern oder korrigieren, Lesbarkeit Optik :)
Ich müsste jetzt die "Theorie" mit "Tag_Gesammt" addieren
und alles was ich in Tage Gruppiert habe benötige ich also auch addiert für den angegebenen Zeitraum (01.06.2017 bis 30.06.2017) Theorie Monatssumme und auch für alle anderen Leistungen.

Nette Grüsse TECHNIC
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

Du hast noch einen Left Join doppelt drin, da würde einer reichen. Und den left join auf die leistaonstiges brauchst du im inneren select gar nicht mehr.

Eine Summenzeile bekommen wir auch noch hin, ich bin aber erstmal ein paar Tage weg

Bis dahin
Biber
 
Ok, danke dir, schönen Urlaub :)

Technic

In dieser Abfrage sehe ich aber den Fehler nicht und bekomme diese Fehlermeldung
MYSQL ERROR 1248 (42000): Every derived table must have its own alias
SQL:
CASE WHEN X.PpAz_1_AM = 0 THEN '-' ELSE x.PpAz_1_AM END AS Pa_1_AM,
CASE WHEN x.PpAz_1_A1 = 0 THEN '-' ELSE x.PpAz_1_A1 END AS Pa_1_A1,
CASE WHEN x.PpAz_1_A = 0 THEN '-' ELSE x.PpAz_1_A END AS Pa_1_A,
CASE WHEN x.PpAz_1_A2 = 0 THEN '-' ELSE x.PpAz_1_A2 END AS Pa_1_A2,
CASE WHEN x.PpAz_1_B = 0 THEN '-' ELSE x.PpAz_1_B END AS Pa_1_B,
CASE WHEN x.PpAz_1_BE = 0 THEN '-' ELSE x.PpAz_1_BE END AS Pa_1_BE,
CASE WHEN x.PpAz_2_AM = 0 THEN '-' ELSE x.PpAz_2_AM END AS Pa_2_AM,
CASE WHEN x.PpAz_2_A1 = 0 THEN '-' ELSE x.PpAz_2_A1 END AS Pa_2_A1,
CASE WHEN x.PpAz_2_A = 0 THEN '-' ELSE x.PpAz_2_A END AS Pa_2_A,
CASE WHEN x.PpAz_2_A2 = 0 THEN '-' ELSE x.PpAz_2_A2 END AS Pa_2_A2,
CASE WHEN x.PpAz_2_B = 0 THEN '-' ELSE x.PpAz_2_B END AS Pa_2_B,
CASE WHEN x.PpAz_2_BE = 0 THEN '-' ELSE x.PpAz_2_BE END AS Pa_2_BE,
CASE WHEN x.PpAz_0 = 0 THEN '-' ELSE y.PpAz_0 END AS Pp_ohne_erfolg
FROM(
/* Anfang Erste Bestandene Prüfung*/

SELECT
(CASE WHEN klpp.id_fsklnr = 50 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END)AS PpAz_1_AM,
(CASE WHEN klpp.id_fsklnr = 13 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END)AS PpAz_1_A1,
(CASE WHEN klpp.id_fsklnr = 51 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_1_A,
(CASE WHEN klpp.id_fsklnr = 53 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_1_A2,
(CASE WHEN klpp.id_fsklnr = 15 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_1_B,
(CASE WHEN klpp.id_fsklnr = 16 AND
klp.bezeichnung IN ('Praxis','Prüfung') AND
klp.id_prstatus = 1 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_1_BE,
/* Anfang Zweite Bestandene Prüfung*/
 
(CASE WHEN klpp.id_fsklnr = 50 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END)AS PpAz_2_AM,
(CASE WHEN klpp.id_fsklnr = 13 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END)AS PpAz_2_A1,
(CASE WHEN klpp.id_fsklnr = 51 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_2_A,
(CASE WHEN klpp.id_fsklnr = 53 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_2_A2,
(CASE WHEN klpp.id_fsklnr = 15 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_2_B,
(CASE WHEN klpp.id_fsklnr = 16 AND
klp.bezeichnung IN ('WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_2_BE,
/* Anfang Erste und Zweite Nicht Bestandene Prüfung*/
 
(CASE WHEN klpp.id_fsklnr IN (50,13,51,53,15,16) AND
klp.bezeichnung IN ('Praxis','Prüfung','WH Praxis','WH Prüfung') AND
klp.id_prstatus = 2 AND
klp.isUnterschrift = TRUE AND
ml.lsdate = x.lsdate AND
ml.id_nrmitar = x.id_nrmitar
THEN COUNT(klpp.bezeichnung)
ELSE 0 END) AS PpAz_0
FROM davidw2000._mtbl_leist AS ml
LEFT JOIN davidw2000._kde_leist AS kl ON ml.id_flleist = kl.id_flleist
LEFT JOIN davidw2000._kde_leistpruefungpraxis AS klpp ON kl.id_kdleist = klpp.id_kdleist
[sql]
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

ist ein bisschen schwierig zu erkennen, wo jetzt dieser Ausschnitt hingehört... Es ist für mich nicht erkennbar, wo das enthaltene 'select from ( ' seine schließende Klammer hat.. Jedenfalls hast du in einem Left Join einen Tabellenalias Kl vergeben, sprichst ihn aber als Alias Klp an.
Das dürfte die Fehlermeldung auslösen.

Gibt es denn jetzt ein Summen-Select mit dem Alias x und ein weiteres neues wie von dir gepostet mit dem Alias y oder wie ist der Plan?

Grüße
Biber
 
Hi Biber, ich glaube das war Unsinn was ich zusammen gereimt habe, also das ist aktuell der funktionierende teil
SQL:
SELECT 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.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,
       
   
/*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


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

ich benötige die Anzahl der bestandenen ersten Prüfungen ("Praxis","Prüfungen") und die anzahl der WH Prüfungen ("WH Praxis","WH Prüfung")
diese als Beispiel bringen mir diese, aber wenn ich für jede klasse abfrage dauert die mir zu lange, müsste jetzt mit einem inneren SELECT alle COUNTwerte also alle Abfragen für die jeweilige klasse die anzahl der Prüfungen zählen.

SQL:
  /*-------------------------------------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,
[sql]

Hi Biber, das hier geht, im SQL Editor, aber nicht mit der was du unterstützt hast, wüsste nicht wo ich diesen abschnitt einfügen soll :(
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]
möchte ja auch nicht alles doppelt schreiben :)
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

so, jetzt habe ich noch mal draufgeschaut.

In dem Beitrag #20 (dem letzten Post auf Seite 1 dieses Threads) verwendest du doch schon den "passenden" LEFT JOIN innerhalb des "Summen-SELECTs" mit dem Alias x.

Dort steht doch u.a.

SQL:
SELECT <irgendwas endgültig hybsch formatiertes>
 FROM (
   SELECT <viele Summenwerte mit Alias x>
FROM davidw2000._mtbl_leist AS leist
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 lprapru
    ON lkde.id_kdleist = lprapru.id_kdleist AND lprapru.isUnterschrift = TRUE
LEFT JOIN davidw2000._kde_leistfahrstunden    AS lfahrsUsF
    ON lkde.id_kdleist = lfahrsUsF.id_kdleist AND lfahrsUsF.isUnterschrift = FALSE
LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lprapruUsF
   ON lkde.id_kdleist = lprapruUsF.id_kdleist AND lprapruUsF.isUnterschrift = FALSE
WHERE leist.id_nrmitar = 1
AND leist.lsdate BETWEEN '2017-06-01 00:00:00' AND '2017-06-30 23:59:59'
GROUP BY leist.lsdate
) AS x
....

Und dieser LEFT JOIN
...LEFT JOIN davidw2000._kde_leistpruefungpraxis AS lprapru
ON lkde.id_kdleist = lprapru.id_kdleist AND lprapru.isUnterschrift = TRUE

... der ist doch genau derjenige, den du auch im zuletzt geposteten Statement benutzt.
Okay, der gewählte Alias ist im ersten Fall "lprapru" und in dem neuen Statement "lppru", aber sonst....

Bau doch in das ältere Statement zum Test nur mal EINEN der Werte ein, innerhalb der Summen-Ermittlungsarie mit dem Alias x mit der auch sonst verwendetetn Mimik, z.B.
SQL:
...
   SUM( CASE WHEN lprapru.id_fsklnr = 50 AND
             lprapru.bezeichnung IN ('Praxis','Prüfung') AND
                 lprapru.id_prstatus = 1
       -- AND  lprapru.isUnterschrift = TRUE /* Bedingung ist im JOIN */ 
         THEN 1  ELSE 0 END ) AS PpAz_1_AM,
  --  beispielsweise diesen hier
...

Den im inneren SELECT berechneten musst du im äußeren SELECT auch wieder in Empfang nehmen und anzeigen.

Wenn das funktioniert, dann kannst du die anderen Werte analog copy&pasten vom neuen Statment in das ältere.

Grüße
Biber
 
Zuletzt bearbeitet:
Hi Biber,

hoffe du hattest einen schönen Urlaub, also das funktioniert je mehr es wird desto unübersichtlicher wird es :)
SQL:
SELECT       
       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.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,
       
   
/*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

WHERE leist.id_nrmitar = 3
AND  leist.lsdate BETWEEN '2017-07-01 00:00:00' AND '2017-07-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]

In Beitrag #24 muss das hier integriert werden da ich hier wieder INNER JOIN verwenden muss verstehe ich nicht, aber so funktioniert es, aber mit der Abfrage in Beitrag #24 bekomme ich falsches Ergebnis
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 keine_Ahnung[sql]
 
Zuletzt bearbeitet von einem Moderator:
Moin Technic1965,

Bitte erläutere mal das falsche Ergebnis.
Bei meinem Beispiel mit ppAz_1_AM sollten laut Plan die an diesem Tag gebuchten Wiederhol-Prüfungen berechnet werden.
Was kommt denn statt dessen raus?

Zum Thema Unübersichtlichkeit: ja, stimmt.
Bleibt nicht aus durch das nötige Pivotieren von mehreren Feldern. Könnten wir durch Verwendung von zwei Views etwas entschärfen, aber ich wollte erstmal die inhaltliche Richtigkeit sicherstellen.

Grüße
Biber
 
Zurück