Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Anzahl Ferientage pro Monat ausgeben (https://www.delphipraxis.net/174825-anzahl-ferientage-pro-monat-ausgeben.html)

barnti 12. Mai 2013 14:11

Datenbank: Postgres • Version: 9.2 • Zugriff über: pgAdmin

Anzahl Ferientage pro Monat ausgeben
 
Hallo und einen schönen Sonntag,

ich grüble über die folgende Abfrage:
Code:
SELECT
  "Timedimension".year,
  "Timedimension".month,
   CASE
            WHEN count("Timedimension".holiday) = 0 THEN 0::bigint
            ELSE count("Timedimension".holiday)
        END AS count
FROM
  public."Timedimension"
WHERE
  "Timedimension".holiday = 'Holiday'
GROUP BY
  "Timedimension".year,
  "Timedimension".month
ORDER BY
  "Timedimension".year,
  "Timedimension".month
Das Ergbenis liefert mir fast das, was ich möchte. Das Problem: Wenn es in einem Monat, hier September, keine Feiertage gibt, erschint diese Zeile auch nicht. Ihc möchte aber eine 0 als Ausgabe...

Kann jemand helfen?

Viele Grüße,

Barntl

Furtbichler 12. Mai 2013 15:40

AW: Anzahl Ferientage pro Monat ausgeben
 
Code:
SELECT
   "Timedimension".year,
   "Timedimension".month,
    sum (CASE WHEN "Timedimension".holiday = 'Holiday' then 1 else 0 end) as count
 FROM
   public."Timedimension"
 GROUP BY
   "Timedimension".year,
   "Timedimension".month
 ORDER BY
   "Timedimension".year,
   "Timedimension".month
Du kannst Dir das Leben noch vereinfachen, wenn es eine Spalte 'Monat und Jahr' gibt. Nach dieser kannst Du dann gruppieren und sortieren. Das geht dann noch etwas einfacher, als ewig 'year,month' zu schreiben.

barnti 12. Mai 2013 15:51

AW: Anzahl Ferientage pro Monat ausgeben
 
Hallo,

vielen Dank! Ich muss mein SQL dringend aufbessern. Mit fällt das immer wieder schwer - leider auch bei relativ einfachen Abfragen...

Gruß,

Barnti

Furtbichler 13. Mai 2013 07:09

AW: Anzahl Ferientage pro Monat ausgeben
 
Übrigens: Informationen dieser Art werden in einer Dimensionstabelle nicht berechnet, sondern geeignet abgelegt.

Du kannst z.B. eine Spalte 'Monat/Jahr' anlegen, in der z.B. 'Mai 2013' steht. Dann hast Du sowohl ein einfaches Gruppierungskriterium als auch gleich das Ausgabeformat (in Deutsch).

Dann kannst Du eine Spalte 'Anzahl Feiertage im bisherigen Monat' anlegen. Dort steht dann für jeden Tag des Monats, wieviele Feiertage es in diesem Monat bisher gab. Ich würde dann noch eintragen, der wievielte Arbeitstag der Woche, des Monats, des Quartals und des Jahres ein bestimmtes Datum ist.

Das erleichtert eine Statistik über Arbeitsleistungen sehr (natürlich nicht personenbezogen).

So wäre die Query dann übrigens:

Code:
select MonatJahr,
       max(FeierTageImMonat)
from TimeDimension
group by MonatJahr
-- sort by MonatJahr -- ich würde das im Client machen, der Server soll nicht sortieren müssen.

sx2008 13. Mai 2013 08:47

AW: Anzahl Ferientage pro Monat ausgeben
 
Zitat:

Zitat von Furtbichler (Beitrag 1215167)
Code:
select MonatJahr,
       max(FeierTageImMonat)
from TimeDimension
group by MonatJahr
-- sort by MonatJahr -- ich würde das im Client machen, der Server soll nicht sortieren müssen.

Bei GROUP BY muss der Server die Datensätze sowieso sortieren; ein ORDER BY wäre also keine Performancebremse.
Die Anzahl der Datensätze ist ausserdem sehr gering.
Der Server sollte hier ruhig sortieren, da der Aufwand für den Server kleiner ist als für den Client.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz