/* M0 Golden-Master Queries Ziel: - Fachliche Legacy-Ergebnisse exportieren, damit Migration und neue SaaS-App gegen denselben Stand verglichen werden koennen. Ausfuehrung: - In der Legacy-Datenbank ausfuehren. - Ergebnisse je Query als CSV speichern. - Keine personenbezogenen Exporte ins Repo committen. */ DECLARE @CurrentYear int = YEAR(GETDATE()); -- 1. Teilnehmer-Basisdaten SELECT m.MitarbeiterID, m.Name, m.Email, m.aktiv, m.admin FROM kl_Mitarbeiter m ORDER BY m.Name; -- 2. Saldo je Teilnehmer WITH payments AS ( SELECT MitarbeiterID, SUM(Betrag) AS total_payments FROM kl_Einzahlungen GROUP BY MitarbeiterID ), consumption AS ( SELECT MitarbeiterID, SUM(Kosten) AS total_costs, SUM(AnzahlStriche) AS total_marks FROM kl_Kaffeeverbrauch GROUP BY MitarbeiterID ) SELECT m.MitarbeiterID, m.Name, m.Email, COALESCE(p.total_payments, 0) AS total_payments, COALESCE(c.total_costs, 0) AS total_costs, COALESCE(c.total_marks, 0) AS total_marks, COALESCE(p.total_payments, 0) - COALESCE(c.total_costs, 0) AS balance FROM kl_Mitarbeiter m LEFT JOIN payments p ON p.MitarbeiterID = m.MitarbeiterID LEFT JOIN consumption c ON c.MitarbeiterID = m.MitarbeiterID ORDER BY m.Name; -- 3. Jahreswerte je Teilnehmer WITH year_payments AS ( SELECT MitarbeiterID, SUM(Betrag) AS year_payments FROM kl_Einzahlungen WHERE YEAR(Datum) = @CurrentYear GROUP BY MitarbeiterID ), year_consumption AS ( SELECT MitarbeiterID, SUM(Kosten) AS year_costs, SUM(AnzahlStriche) AS year_marks FROM kl_Kaffeeverbrauch WHERE YEAR(Datum) = @CurrentYear GROUP BY MitarbeiterID ) SELECT m.MitarbeiterID, m.Name, m.Email, COALESCE(yp.year_payments, 0) AS year_payments, COALESCE(yc.year_costs, 0) AS year_costs, COALESCE(yc.year_marks, 0) AS year_marks FROM kl_Mitarbeiter m LEFT JOIN year_payments yp ON yp.MitarbeiterID = m.MitarbeiterID LEFT JOIN year_consumption yc ON yc.MitarbeiterID = m.MitarbeiterID ORDER BY m.Name; -- 4. Letzte Einzahlungen je Teilnehmer SELECT e.EinzahlungsID, e.MitarbeiterID, m.Name, m.Email, e.Betrag, e.Datum FROM kl_Einzahlungen e JOIN kl_Mitarbeiter m ON m.MitarbeiterID = e.MitarbeiterID ORDER BY e.Datum DESC, e.EinzahlungsID DESC; -- 5. Letzte Strich-/Verbrauchseintraege je Teilnehmer SELECT v.VerbrauchID, v.MitarbeiterID, m.Name, m.Email, v.AnzahlStriche, v.Kosten, v.KostenproStrich, v.Datum, v.Eintragsart FROM kl_Kaffeeverbrauch v JOIN kl_Mitarbeiter m ON m.MitarbeiterID = v.MitarbeiterID ORDER BY v.Datum DESC, v.VerbrauchID DESC; -- 6. Aktuelle Konfiguration SELECT * FROM kl_config; -- 7. Aktuelle und historische Hinweise SELECT id, nachricht, gueltig_bis FROM kl_hinweise ORDER BY gueltig_bis DESC; -- 8. 100-Tage-Vorderseite analog Legacy-Stricherfassung DECLARE @ReferenceDate date = ( SELECT MAX(CAST(Datum AS date)) FROM kl_Kaffeeverbrauch WHERE Datum < CAST(GETDATE() AS date) ); SELECT m.MitarbeiterID, m.Name, m.Email, SUM(v.AnzahlStriche) AS marks_in_window FROM kl_Mitarbeiter m JOIN kl_Kaffeeverbrauch v ON m.MitarbeiterID = v.MitarbeiterID WHERE v.Datum >= DATEADD(DAY, -100, @ReferenceDate) AND m.aktiv = 1 GROUP BY m.MitarbeiterID, m.Name, m.Email HAVING SUM(v.AnzahlStriche) >= 10 ORDER BY m.Name; -- 9. 100-Tage-Rueckseite analog Legacy-Stricherfassung SELECT m.MitarbeiterID, m.Name, m.Email, COALESCE(SUM(v.AnzahlStriche), 0) AS marks_in_window FROM kl_Mitarbeiter m LEFT JOIN kl_Kaffeeverbrauch v ON m.MitarbeiterID = v.MitarbeiterID AND v.Datum >= DATEADD(DAY, -100, @ReferenceDate) WHERE m.aktiv = 1 GROUP BY m.MitarbeiterID, m.Name, m.Email HAVING COALESCE(SUM(v.AnzahlStriche), 0) < 10 ORDER BY m.Name; -- 10. CSV-Import-Dublettenbasis SELECT e.MitarbeiterID, m.Name, e.Betrag, CONVERT(varchar, e.Datum, 23) AS booking_day, COUNT(*) AS duplicates_per_day FROM kl_Einzahlungen e JOIN kl_Mitarbeiter m ON m.MitarbeiterID = e.MitarbeiterID GROUP BY e.MitarbeiterID, m.Name, e.Betrag, CONVERT(varchar, e.Datum, 23) HAVING COUNT(*) > 1 ORDER BY booking_day DESC, m.Name; -- 11. Jahresauswertung: Gesamtstriche aktuelles Jahr SELECT m.MitarbeiterID, m.Name, m.Email, SUM(v.AnzahlStriche) AS GesamtStriche FROM kl_Kaffeeverbrauch v JOIN kl_Mitarbeiter m ON v.MitarbeiterID = m.MitarbeiterID WHERE YEAR(v.Datum) = @CurrentYear AND m.aktiv = 1 GROUP BY m.MitarbeiterID, m.Name, m.Email ORDER BY GesamtStriche DESC, m.Name;