M0 Einrichtung
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user