Announcement

Collapse
No announcement yet.

Zwischensummen bilden

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

  • Zwischensummen bilden

    Ein gutes neues Jahr allesamt.


    Nachdem ich mich nicht mehr über die Feiertage auf dem fränkischen Land befinde bin ich wieder online und würde Euch gerne mit einem weiteren Problem befragen. (Schlepptop mitnehmen geht, Internet nicht)

    Meine Personal-Plan-Ist-Kosten-Einsatz-Datenbank ist als eierlegende Wollmichsau weiter gewachsen.

    In dem von mir aktuell zusammengestellten View möchte ich, dass für jeden Monat, in dem Gehalt gezahlt wurde das je Person als Teil-Summe ausgegeben wird.

    Die Gehälter bestehen je Abrechnungsmonat (Fuerperiode) aus mindestens einem Gehaltsbestandteil, meist mehreren.

    [HIGHLIGHT=SQL]
    SELECT
    monatszuordnung.bereich AS Bereich,
    sapauszug.referenz AS PersNr,
    monatszuordnung.Name AS Name,
    monatszuordnung.vorname AS Vorname,
    sapauszug.fuerperiode AS Fuerperiode,
    total(sapauszug.Betrag) AS Gehalt,
    'IST' AS Zahl
    FROM
    sapauszug
    INNER JOIN monatszuordnung ON monatszuordnung.Persnr = sapauszug.referenz
    WHERE
    monatszuordnung.abt = '06'
    GROUP BY sapauszug.referenz , sapauszug.fuerperiode
    ORDER BY Name, Vorname
    [/HIGHLIGHT]

    Nur wird mir hier nie das ausgegeben, was ich benötige:

    Entweder nur ein Gehaltsbestandteil je Person und Fuerperiode
    oder es werden Zahlen ausgegeben, welche sich über mehrere Monate erstrecken,
    oder die Gehaltsbestandteile erscheinen mehrmals.

    Was habe ich hier falsch gemacht?

    Weitere Info:

    Über Union von
    [HIGHLIGHT=SQL]
    SELECT
    bereich AS Bereich,
    PersNr,
    Name,
    Vorname,
    (Kal_Per||'-01') AS Fuerperiode,
    Gehalt_Mon AS Gehalt,
    'PLANzahl' AS Zahl
    FROM monatszuordnung
    WHERE monatszuordnung.Kal_Per > (
    SELECT MAX(sapauszug.fuerperiode)
    FROM sapauszug
    WHERE referenz = monatszuordnung.Persnr
    )
    AND
    monatszuordnung.abt LIKE '06'
    [/HIGHLIGHT]
    habe ich dann die IST-Zahlen um die noch folgenden PLANzahlen ergänzt und damit einen schönen Überblick über die Gesamtkosten.

    Vielen Dank
    Wolf-Tilmann
    Aktuell "unerlaubt" verwendete Datenbank: SQLite - Da kommt mein Admin nicht dahinter :-)

    Ach ja:
    Daten lassen sich am Besten mit der Keule bearbeiten.

  • #2
    Wenn ich es korrekt verstehe müsste folgendes klappen:
    Code:
    select ...
    from monatszuordnung
    join (select sum(betrag) betrag, referenz from sapauszug where fuerperiode = 'xy') sap on monatszuordnung.Persnr = sap.referenz
    ...
    So sind die Einzelbeträge für den Monat schon summiert. Wenn du mehrere Monate abrufst, machst du eben ein 'group by fuerperiode' anstatt dem where im Subselect.

    Comment


    • #3
      Vielen Dank

      Hier meine abgeleitete Lösung
      [HIGHLIGHT=SQL]
      CREATE VIEW Abt06 AS
      SELECT
      Bereich,
      abt Abt,
      sapauszug.referenz PersNr,
      Name,
      Vorname,
      sapauszug.fuerperiode Fuerperiode,
      ROUND(TOTAL(betrag),2) Gehalt,
      'IST' Zahl
      FROM sapauszug
      INNER JOIN (
      SELECT
      bereich AS Bereich,
      fakultaet AS Fakultaet,
      Name AS Name,
      vorname AS Vorname,
      Persnr AS Personr
      FROM monatszuordnung
      WHERE abt = '06'
      GROUP BY Personr
      )
      ON PersNr = sapauszug.referenz
      GROUP BY Persnr, Fuerperiode

      UNION

      SELECT
      bereich Bereich,
      abt Abt,
      PersNr Personnr,
      Name,
      Vorname,
      (Kal_Per||'-01') Fuerperiode,
      Gehalt_Mon Gehalt,
      'PLAN' Zahl
      FROM monatszuordnung
      WHERE monatszuordnung.Kal_Per > (
      SELECT MAX(sapauszug.fuerperiode) FROM sapauszug
      WHERE referenz = monatszuordnung.Persnr
      )
      AND
      monatszuordnung.abt = '06'
      ORDER BY Personnr ASC
      [/HIGHLIGHT]

      Einige Namen werden nicht gefunden, dass muss aber einen anderen Fehler haben (Wahrscheinich irgendwo in einer Tabelle ein Schreibfehler)

      Einen schönen Abend wünsche ich

      Wolf-Tilmann
      Aktuell "unerlaubt" verwendete Datenbank: SQLite - Da kommt mein Admin nicht dahinter :-)

      Ach ja:
      Daten lassen sich am Besten mit der Keule bearbeiten.

      Comment

      Working...
      X