Thema: Delphi SQL beschleunigen

Einzelnen Beitrag anzeigen

Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#6

AW: SQL beschleunigen

  Alt 8. Nov 2012, 15:46
@Union:
Hat super geklappt mit der temporären Tabelle. SQL wird in gut 2 sekunden ausgeführt ohne Setzen von Indexen ...


Jetzt probier ich gerade das mit dem Case, bekomms aber leider nicht so hin.

Code:
SELECT p.ID, p.PersonalNr, p.Name, p.Vorname, IFNULL(pz.Resturlaubgesamt, 0) as RUL,
a.Bezeichnung as Abteilung, a.InterneNummer as AbtNr, f.Bezeichnung as Firma, f.FirmenNr,
mr.JAHR, mr.MONAT, IFNULL(ZMIF.MinToIHour(mr.SOLLSTUNDEN - mr.KRANKSTUNDENBEZAHLT - mr.URLAUBSSTUNDENBEZAHLT - mr.FEIERTAGSSTUNDEN),0) as SOLL,
IFNULL(ZMIF.MinToIHour(mr.MO_GLEIT),0) as MGLZ, IFNULL(ZMIF.MinToIHour(mr.AUSBEZAHLT),0) as Ausbezahlt,
IFNULL(ZMIF.MinToIHour(mr.JAHRESGLEITZEIT),0) as JGLZ, IFNULL(mr.KAPPUNGSKMONATS_GL,0) as MKappGLZ,
IFNULL(mr.KAPPUNGSKJAHRES_GL,0) as JKappGLZ, IFNULL(mr.URLAUBSTAGEBEZAHLT,0) as UL,
IFNULL(mr.KRANKENTAGEBEZAHLT,0) as KGA, IFNULL(mr.KRANKENTAGEUNBEZAHLT,0) as KGU,
IFNULL(mr.DIENSTREISE,0) as SDR, IFNULL(mr.BERUFSSCHULE,0) as SBS,
IFNULL(ZMIF.MinToIHour(mr.ISTSTUNDENBRUTTO),0) as Brutto,
IFNULL(ZMIF.MinToIHour(mr.ISTSTUNDENNETTO),0) as Netto,
IFNULL(mr.FEIER_TAGE,0) as FT,
IFNULL(ZMIF.MinToIHour(e_100.M),0) as Nachtzuschlag,
IFNULL(ZMIF.MinToIHour(e_110.M),0) as Samstagzuschlag,
IFNULL(ZMIF.MinToIHour(e_120.M),0) as Sonntagzuschlag,
IFNULL(ZMIF.MinToIHour(e_130.M),0) as Feiertagzuschlag,
IFNULL(bd.Fehltage,0) as Fehltage,
CASE
  when b.Buchungsart = 'AR' then sum(b.BSumme) as AR
END
FROM
Personal p
LEFT OUTER JOIN Firma f ON p.ID_Firma = f.ID
LEFT OUTER JOIN Abteilungen a ON p.ID_Abteilungen = a.ID
LEFT OUTER JOIN Monatswerte_Report mr ON p.ID = mr.ID_PERSONAL
LEFT OUTER JOIN PersonalZusatz pz ON p.ID = pz.ID_Personal
LEFT OUTER JOIN Ergebnis e_100 
                ON (mr.ID_Personal = e_100.ID_Personal AND e_100.Jahr = mr.Jahr
               AND e_100.Monat = mr.Monat AND e_100.Kontonr = 100)
LEFT OUTER JOIN Ergebnis e_110 
                ON (mr.ID_Personal = e_110.ID_Personal AND e_110.Jahr = mr.Jahr
            AND e_110.Monat = mr.Monat AND e_110.Kontonr = 110)
LEFT OUTER JOIN Ergebnis e_120 
                ON (mr.ID_Personal = e_120.ID_Personal AND e_120.Jahr = mr.Jahr
            AND e_120.Monat = mr.Monat AND e_120.Kontonr = 120)
LEFT OUTER JOIN Ergebnis e_130 
                ON (mr.ID_Personal = e_130.ID_Personal AND e_130.Jahr = mr.Jahr
            AND e_130.Monat = mr.Monat AND e_130.Kontonr = 130)
LEFT OUTER JOIN Buchungen b
                ON (mr.ID_Personal = b.ID_Personal AND Year(b.Datum) = mr.Jahr
            AND Month(b.Datum) = mr.Monat)
LEFT OUTER JOIN #bdtemp bd on bd.ID_PERSONAL = mr.ID_PERSONAL and bd.Jahr = mr.Jahr
                and bd.Monat = mr.MONAT
GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
Zitat:
ERROR IN SCRIPT: poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2115; [iAnywhere Solutions][Advantage SQL Engine]Expected lexical
element not found: WHEN | ELSE | END [Parsing Expression (column 31 in the SELECT clause)] -- Location of error in the SQL statement is: 1163 (line: 16
column: 34)
  Mit Zitat antworten Zitat