![]() |
AW: Max(Datum) Min(Datum)
Besser wäre es zuerst die Union zu bilden und dann dieses Ergebnis mit den Stammdaten zu verknüpfen.
Also ganz grob so
SQL-Code:
Der Name "DevTbl" ist ein Alias für die innere Abfrage mit UNION ALL.
SELECT DevTbl.*, Stammdaten.* FROM
(SELECT ... FROM Buchungen WHERE ... GROUP BY ... UNION ALL SELECT ... FROM Buchungen WHERE ... GROUP BY ...) DevTbl INNER JOIN Stammdaten ON Stammdaten.xxx=DevTbl.xxx |
AW: Max(Datum) Min(Datum)
Hi,
werd ich alles gleich nochmal ausprobieren, hab nämlich noch kleine Ergebnisprobleme mit dem SQL. :evil: Ich meld mich wieder . |
AW: Max(Datum) Min(Datum)
Ich steh etwas auf dem Schlauch.
Ich kriege mit dem SQL zu Beginn des Threads meine Ergebnismenge zwei mal.
Code:
01.02.2013
02.02.2013 ... 28.02.2013 01.02.2013 02.02.2013 28.02.2013
Code:
Kann mir nicht erklären warum !?!
SELECT ma_s.ID, ma_s.Personalnummer as Personalnr, ma_s.Nachname as Name,
ma_s.Vorname, bd.Datum, bd.Kuerzel, bd.Feiertag, a.Bezeichnung, IIF(be.Pause = 0, null, ZMIF.MinToHour(be.Pause)) AS PauseH, ZMIF.MinToIHour(be.Pause) as PauseIH, IIF(be.Tagesbrutto = 0, null, ZMIF.MinToHour(be.Tagesbrutto)) AS TagesbruttoH, ZMIF.MinToIHour(be.Tagesbrutto) as TagesbruttoIH, IIF(be.Mehrarbeit = 0, null, ZMIF.MinToHour(be.Mehrarbeit)) AS MehrarbeitH, ZMIF.MinToIHour(be.Mehrarbeit) as MehrarbeitIH, b.BuchungsArt, min(b.Me1) as Me1, max(b.Me2) as Me2, b.Flag FROM MA_Stammdaten ma_s LEFT OUTER JOIN Abteilungen a ON ma_s.ID_Abteilungen = a.ID LEFT OUTER JOIN Buchungsdatei bd ON ma_s.ID = bd.ID_MA_Stammdaten LEFT OUTER JOIN Buchungen b ON bd.ID_MA_Stammdaten = b.ID_MA_Stammdaten AND bd.Datum = b.Datum LEFT OUTER JOIN FEHLTAGEDEFINITION ftd ON bd.Fehltag = ftd.Kuerzel LEFT OUTER JOIN B_Ergebnisse be ON bd.ID = be.ID_Buchungsdatei WHERE ma_s.ID IN (3) and Month(bd.Datum) = 2 and Year(bd.Datum) = 2013 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18 UNION ALL SELECT ma_s.ID, ma_s.Personalnummer as Personalnr, ma_s.Nachname as Name, ma_s.Vorname, bd.Datum, bd.Kuerzel, bd.Feiertag, a.Bezeichnung, IIF(be.Pause = 0, null, ZMIF.MinToHour(be.Pause)) AS PauseH, ZMIF.MinToIHour(be.Pause) as PauseIH, IIF(be.Tagesbrutto = 0, null, ZMIF.MinToHour(be.Tagesbrutto)) AS TagesbruttoH, ZMIF.MinToIHour(be.Tagesbrutto) as TagesbruttoIH, IIF(be.Mehrarbeit = 0, null, ZMIF.MinToHour(be.Mehrarbeit)) AS MehrarbeitH, ZMIF.MinToIHour(be.Mehrarbeit) as MehrarbeitIH, b.BuchungsArt, b.Me1 as Me1, b.Me2 as Me2, b.Flag FROM MA_Stammdaten ma_s LEFT OUTER JOIN Abteilungen a ON ma_s.ID_Abteilungen = a.ID LEFT OUTER JOIN Buchungsdatei bd ON ma_s.ID = bd.ID_MA_Stammdaten LEFT OUTER JOIN Buchungen b ON bd.ID_MA_Stammdaten = b.ID_MA_Stammdaten AND bd.Datum = b.Datum LEFT OUTER JOIN FEHLTAGEDEFINITION ftd ON bd.Fehltag = ftd.Kuerzel LEFT OUTER JOIN B_Ergebnisse be ON bd.ID = be.ID_Buchungsdatei WHERE ma_s.ID IN (3) and Month(bd.Datum) = 2 and Year(bd.Datum) = 2013 ORDER By ma_s.ID Außerdem werden Pausezeiten nicht einzeln aufgelistet sondern auch nur die erste Buchung und die letzte.
Code:
SQL Ergebnis ..
Arbeitszeit: 07:00 - 16:15
Pause: 11:49 - 12:31 Arbeitszeit: 17:00 - 20:00 Pause: 18:00 - 18:30
Code:
.. was ja falsch ist, da die Pausen nicht zusammengefasst werden sollen.
Arbeitszeit: 07:00 - 20:00
Pause: 11:49 - 18:30 |
AW: Max(Datum) Min(Datum)
Du solltest zunächst mal, wie in Beitrag #2 bereits erwähnt wurde, die where-Bedingungen ergänzen (im ersten Teil Buchungsart='A', im zweiten Buchungsart='P')
|
AW: Max(Datum) Min(Datum)
Hi, nehm ich die Bedingungen (im ersten Teil Buchungsart='A', im zweiten Buchungsart='P') in meine WHERE Bedingungen auf, werden nur noch Tage mit Buchungen angezeigt.
Die zweite WHERE Bedingung müsste ich ich auch nicht nur auf 'P' beschränken, sondern eigentlich <> 'A' da es auch Buchungsarten wie 'D' oder 'U' gibt und an Wochenenden ist die Buchungsart ' ' Lass ich die Bedinungen (Buchungsart = 'A' und 'P') komplett raus dann werden alle Tage angezeigt, er berechnet aber für alle BuchungsArten das min und das max Hat jmd noch ne Idee? |
AW: Max(Datum) Min(Datum)
Mir fallen 2 Möglichkeiten ein:
1. Anstatt das where anzupassen, das ganze in den join packen (... on ... and buchungsart='P') 2. Bei der "Berechnung Min/Max" ein IIF einbauen: min(iif(buchungsart, 'P', b.Me1, null)) as Me1 |
AW: Max(Datum) Min(Datum)
Zitat:
Code:
Hab die Bedingung für die BuchungsArt nun in den Join gepackt (oben "and b.BuchungsArt = 'A' und unten "and b.BuchungsArt = 'P' wobei ich immmernoch der Meinung bin, dass ich hier "and b.BuchungsArt <> 'A' schreiben muss.
SELECT ma_s.ID, ma_s.Personalnummer as Personalnr, ma_s.Nachname as Name,
ma_s.Vorname, bd.Datum, bd.Kuerzel, bd.Feiertag, a.Bezeichnung, IIF(be.Pause = 0, null, ZMIF.MinToHour(be.Pause)) AS PauseH, ZMIF.MinToIHour(be.Pause) as PauseIH, IIF(be.Tagesbrutto = 0, null, ZMIF.MinToHour(be.Tagesbrutto)) AS TagesbruttoH, ZMIF.MinToIHour(be.Tagesbrutto) as TagesbruttoIH, IIF(be.Mehrarbeit = 0, null, ZMIF.MinToHour(be.Mehrarbeit)) AS MehrarbeitH, ZMIF.MinToIHour(be.Mehrarbeit) as MehrarbeitIH, b.BuchungsArt, min(b.Me1) as Me1, max(b.Me2) as Me2, b.Flag FROM MA_Stammdaten ma_s LEFT OUTER JOIN Abteilungen a ON ma_s.ID_Abteilungen = a.ID LEFT OUTER JOIN Buchungsdatei bd ON ma_s.ID = bd.ID_MA_Stammdaten LEFT OUTER JOIN Buchungen b ON bd.ID_MA_Stammdaten = b.ID_MA_Stammdaten AND bd.Datum = b.Datum and b.BuchungsArt = 'A' LEFT OUTER JOIN FEHLTAGEDEFINITION ftd ON bd.Fehltag = ftd.Kuerzel LEFT OUTER JOIN B_Ergebnisse be ON bd.ID = be.ID_Buchungsdatei WHERE ma_s.ID IN (3) and Month(bd.Datum) = 2 and Year(bd.Datum) = 2013 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18 UNION ALL SELECT ma_s.ID, ma_s.Personalnummer as Personalnr, ma_s.Nachname as Name, ma_s.Vorname, bd.Datum, bd.Kuerzel, bd.Feiertag, a.Bezeichnung, IIF(be.Pause = 0, null, ZMIF.MinToHour(be.Pause)) AS PauseH, ZMIF.MinToIHour(be.Pause) as PauseIH, IIF(be.Tagesbrutto = 0, null, ZMIF.MinToHour(be.Tagesbrutto)) AS TagesbruttoH, ZMIF.MinToIHour(be.Tagesbrutto) as TagesbruttoIH, IIF(be.Mehrarbeit = 0, null, ZMIF.MinToHour(be.Mehrarbeit)) AS MehrarbeitH, ZMIF.MinToIHour(be.Mehrarbeit) as MehrarbeitIH, b.BuchungsArt, b.Me1, b.Me2, b.Flag FROM MA_Stammdaten ma_s LEFT OUTER JOIN Abteilungen a ON ma_s.ID_Abteilungen = a.ID LEFT OUTER JOIN Buchungsdatei bd ON ma_s.ID = bd.ID_MA_Stammdaten LEFT OUTER JOIN Buchungen b ON bd.ID_MA_Stammdaten = b.ID_MA_Stammdaten AND bd.Datum = b.Datum and b.BuchungsArt = 'P' LEFT OUTER JOIN FEHLTAGEDEFINITION ftd ON bd.Fehltag = ftd.Kuerzel LEFT OUTER JOIN B_Ergebnisse be ON bd.ID = be.ID_Buchungsdatei WHERE ma_s.ID IN (3) and Month(bd.Datum) = 2 and Year(bd.Datum) = 2013 ORDER By ma_s.ID ==> In meinem Ergebnis werden jetzt aber wieder nur die Buchungen mit Buchungsart "A" angezeigt :x:x Zitat:
Code:
Macht meiner Meinung nach keinen Sinn, im max/min Select zu prüfen ob die BuchungsArt 'P' ist, dann werden die 'A' Buchungen genullt und immer noch max/min von 'P' Buchungen angezeigt.
SELECT ma_s.ID, ma_s.Personalnummer as Personalnr, ma_s.Nachname as Name,
ma_s.Vorname, bd.Datum, bd.Kuerzel, bd.Feiertag, a.Bezeichnung, IIF(be.Pause = 0, null, ZMIF.MinToHour(be.Pause)) AS PauseH, ZMIF.MinToIHour(be.Pause) as PauseIH, IIF(be.Tagesbrutto = 0, null, ZMIF.MinToHour(be.Tagesbrutto)) AS TagesbruttoH, ZMIF.MinToIHour(be.Tagesbrutto) as TagesbruttoIH, IIF(be.Mehrarbeit = 0, null, ZMIF.MinToHour(be.Mehrarbeit)) AS MehrarbeitH, ZMIF.MinToIHour(be.Mehrarbeit) as MehrarbeitIH, b.BuchungsArt, min(IIF(b.BuchungsArt = 'P', b.Me1, null)) as Me1, max(IIF(b.BuchungsArt = 'P', b.Me2, null)) as Me2, b.Flag Ich verzweifel langsam an diesem SQL ... Kollege hat mir vorgeschlagen, mit einem CASE zu arbeiten ?!? |
AW: Max(Datum) Min(Datum)
Ohne mich jetzt bis ins letzte Detail mit dem select befasst zu haben, hast du mal versucht das "and b.BuchungsArt = xxx" nicht innerhalb des joins sondern erst beim where abzufragen, denn das kann oft ein komplett anderes Ergebnis erzielen?
|
AW: Max(Datum) Min(Datum)
Zitat:
Zitat:
Zitat:
Zitat:
Evtl. solltest/musst du auch noch Beitrag #8 beachten. |
AW: Max(Datum) Min(Datum)
Hi,
ja das hab ich auch schon probiert. (wurde in einem vorherigen Post auch schon vorgeschlagen) Liefert mir aber auch nicht das was ich brauch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz