Aggregatsfunktion?!?

N811en

Neuer Benutzer
Beiträge
3
Hallo!

Ich als SQL-Neuling hätte eine Frage und zwar bin ich gerade beim Erstellen eines Jahresstundenblatts für die geleisteten Stunden von Mitarbeitern.

Ich habe daher eine Funktion JS_berechneSaldo geschrieben, welche als Übergabeparameter folgende Werte bekommt:
  1. Jahresstunden_ID (Schüssel zur Identifikation für welches Jahresstundenblatt)
  2. Monat_ID (ID für welchen Monat es sich handelt - 1 = Jänner, 2 = Februar,...)
  3. Jahr_ID (gewünschtes Jahr)
  4. IST (decimal-Wert mit Ist-Stunden)
  5. SOLL (decimal-Wert mit Soll-Stunden)
  6. SOLL-Korrektur (decimal-Wert für evtl. Soll-Stunden-Korrektur)
Der Rückgabewert ist dabei ein decimal-Wert, welcher die Differenz der IST & Soll-Stunden darstellt und für jeden Monat aufsummiert wird.

So funktioniert das Ganze wie gewünscht, allerdings nur mit händisch-eingegebenen Zahlen:

SELECT dbo.JS_berechneSaldo(6, 1, 2014, 121.5, 12.6, 0)AS Jaenner

SELECT dbo.JS_berechneSaldo(6, 1, 2014, 121.5, 12.6, 0)+ dbo.JS_berechneSaldo(6, 2, 2014, 94.5, 16, 0)AS Februar

SELECT dbo.JS_berechneSaldo(6, 1, 2014, 121.5, 12.6, 0)+ dbo.JS_berechneSaldo(6, 2, 2014, 94.5, 16, 0)+ dbo.JS_berechneSaldo(6, 3, 2014, 440.5, 84, 0)AS Maerz

Nun meine Frage, wie kann SQL die Monate automatisch aufsummieren? Ich habe gehört mit einer Aggregatsfunktion könnte dies funktionieren, allerdings habe ich keine Ahnung wie ich diese erstellen muss, da SQL-Server beim erstellen sagt ich brauche eine Assembly?!?

Ich bitte um Hilfe.
Danke und einen schönen Tag noch!
 
Werbung:
Also Aggregat-Funktionen nutzt man normalerweise in Verbindung mit GROUP BY. Das wiederum wendet man normalerweise auf Tabellen oder Sichten an. Warum schmeist du hier deine Zahlen einzeln und händisch in eine Funktion die nichts anderes als Addieren und Subtrahieren macht? Kommen deine Daten nicht aus einer Tabelle?
 
Doch klar kommen die Daten aus einer Table, die drei SELECTS waren nur für euch zur besseren Veranschaulichung was ich genau erreichen will, denn der Aufruf der Funktion berechneSaldo() ist 5 Zeilen lang. Aber meine Frage ist eigentlich, wie kann ich in SQL das Saldo pro Monat aufsummieren?
Hier noch genauer erklärt: Für den Jänner muss ich IST (O18) - SOLL(P18) + Zeitausgleich Vortrag(Q16) rechnen, dies funktioniert auch.
Nun muss ich für den Februar IST(O19) - SOLL(P19) + Saldo_Jänner(Q18) rechnen. Ich bin soweit, dass ich eine neue Funktion berechneSaldoVormonat() habe, welche mir das Saldo des Vormonats liefert. Allerdings muss ich jetzt Saldo_Jänner(Q18) + Saldo_Februar(Q19) rechnen und hier komm ich nicht weiter.
upload_2014-10-2_16-14-6.png
 
Da gibts verschiedene Möglichkeiten, ich kenne jetzt deine Tabellenstruktur nicht. Hier mal ein Beispiel mit Testtabelle:
Code:
WITH tabelle AS (
SELECT    2014 AS Jahr,
        1 AS Monat,
        1 AS Wert
UNION ALL
SELECT    2014 AS Jahr,
        2 AS Monat,
        2 AS Wert
UNION ALL
SELECT    2014 AS Jahr,
        2 AS Monat,
        3 AS Wert
UNION ALL
SELECT    2015 AS Jahr,
        1 AS Monat,
        4 AS Wert
)
SELECT    t.Jahr,
        t.Monat,
        sum(t.Wert) AS Wert,
        (    SELECT    sum(Wert)
            FROM    tabelle
            WHERE    Jahr = t.Jahr
            AND        Monat <= t.Monat ) AS Wert_kommuliert
FROM    tabelle t
GROUP BY t.Jahr,t.Monat
ORDER BY t.Jahr,t.Monat
Eventuell macht es mehr Sinn mit einem Join statt einem Subselect zu arbeiten, das müsste man sich noch überlegen.
 
Doch klar kommen die Daten aus einer Table, die drei SELECTS waren nur für euch zur besseren Veranschaulichung was ich genau erreichen will, denn der Aufruf der Funktion berechneSaldo() ist 5 Zeilen lang. Aber meine Frage ist eigentlich, wie kann ich in SQL das Saldo pro Monat aufsummieren?

M$SQL kann doch Window-Funktionen, oder? Da kannst doch einfach ein Fenster via sum(...) over (partition by ...) machen.
 
Werbung:
Zurück
Oben