Announcement

Collapse
No announcement yet.

kummulierte Werte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • kummulierte Werte

    Hallo,

    wieder mal was Eigenartiges

    Ich habe eine Tabelle mit Zeiterfassungsdaten. Also unter Anderem die Felder SOLLZEIT, ISTZET und DIFFERENZ.

    Nun möchte ich nach Möglichkeit die Mehr- oder Minderarbeit wie einen Kontoauszug fühere. Sprich: In der Tabelle stehen bspw. folgende Daten:

    Datum - Sollzeit - Istzeit - Diff.
    ========================
    1.1.2012---- 8,00---- 8,50---- 0,5
    2.1.2012---- 8,00---- 9,50---- 1,5
    3.1.2012---- 8,00---- 11,5---- 3,5
    ....

    Ich hätte nun am liebsten folgendes Ergebnis:

    Datum - Sollzeit - Istzeit - Diff. --- mein Wunschfeld
    ======================================
    1.1.2012---- 8,00---- 8,50---- 0,5---- 0,5
    2.1.2012---- 8,00---- 9,50---- 1,5---- 2,0
    3.1.2012---- 8,00---- 11,5---- 3,5---- 5,5

    So, dass ich also erkennbar mache, wie sich die, (in dem Fall) Mehrarbeit, ergeben hat.

    ???

  • #2
    [HIGHLIGHT="SQL"]WITH Data ( Datum, Sollzeit, Istzeit, Diff)
    AS ( SELECT CONVERT (DATETIME, '1.1.2012', 104), 8.00, 8.50, 0.5 UNION ALL
    SELECT CONVERT (DATETIME, '2.1.2012', 104),8.00, 9.50, 1.5 UNION ALL
    SELECT CONVERT (DATETIME, '3.1.2012', 104),8.00, 11.5, 3.5
    )
    SELECT D1.Datum, D1.Sollzeit, D1.Istzeit, D1.Diff, SUM (D2.DIFF) AS Wunschfeld
    FROM Data D1
    JOIN Data D2 ON D2.Datum <= D1.Datum
    GROUP BY D1.Datum, D1.Sollzeit, D1.Istzeit, D1.Diff[/HIGHLIGHT]

    Comment


    • #3
      ab SQL-Server 2012 sollte es auch so gehen: (ungetestet)[HIGHLIGHT="SQL"]SELECT D1.Datum, D1.Sollzeit, D1.Istzeit, D1.Diff
      , SUM(D1.Diff) OVER (ORDER BY Datum
      ROWS UNBOUNDED PRECEDING) AS Wunschfeld
      FROM Data D1 [/HIGHLIGHT]

      Comment


      • #4
        Originally posted by ebis View Post
        [HIGHLIGHT="SQL"]WITH Data ( Datum, Sollzeit, Istzeit, Diff)
        AS ( SELECT CONVERT (DATETIME, '1.1.2012', 104), 8.00, 8.50, 0.5 UNION ALL
        SELECT CONVERT (DATETIME, '2.1.2012', 104),8.00, 9.50, 1.5 UNION ALL
        SELECT CONVERT (DATETIME, '3.1.2012', 104),8.00, 11.5, 3.5
        )
        SELECT D1.Datum, D1.Sollzeit, D1.Istzeit, D1.Diff, SUM (D2.DIFF) AS Wunschfeld
        FROM Data D1
        JOIN Data D2 ON D2.Datum <= D1.Datum
        GROUP BY D1.Datum, D1.Sollzeit, D1.Istzeit, D1.Diff[/HIGHLIGHT]

        WOW! Genau das habe ich gesucht - am Ende doch recht einfach. Vielen vielen Dank

        heiko

        Comment

        Working...
        X