Firebird SQL Abfrage

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Firebird SQL Abfrage

Beitragvon aebding » 8. Nov 2017, 10:32 Firebird SQL Abfrage

Hallo Leute,

ich bräuchte bitte Eure Hilfe bei folgendem Problem :

Tabelle :
KassenNr Char 3
BelegNr Char 10
Position Char 3
Datum Date
Uhrzeit Time
Umsatz DOUBLE PRECISION

Ich möchte eine Liste erstellen mit dem Gesamtumsatz in den Zeiten von
00:00:00 - 07:59:59
08:00:00 - 08:59:59
09:00:00 - 09:59:59
....
15:00:00 - 15:59:59
16:00:00 - 16:59:59
17:00:00 - 23:59:59
jeweils pro "KassenNr" und Tag ...

Wie könnte ich das am besten/einfachsten lösen ?
Vielen Dank ...

** Lazarus 1.8.0 RC5, Firebird 2.5.7, ZEOS 7.2 **
aebding
 
Beiträge: 14
Registriert: 4. Okt 2009, 23:08

Beitragvon charlytango » 9. Nov 2017, 10:07 Re: Firebird SQL Abfrage

Hi
.. für mich stellt sich dabei die Frage nach dem Zweck der Liste -- soll sie Selbstzweck sein, oder dient sie zur Aufbereitung in einem Chart oder Report? da wäre dann die Formatierung der Liste eine andere


Code: Alles auswählen
CREATE VIEW v_belege AS
SELECT
b.*,
CASE WHEN HOUR(uhrzeit) <= 8 THEN 1
     WHEN HOUR(uhrzeit) BETWEEN 8 AND 9 THEN 8
     ......
     WHEN HOUR(uhrzeit) >= 17 THEN 17
     ELSE -1
END AS stunde
FROM
belege AS b


dann hast du eine Tabelle die nach deinen Vorgaben getagged ist, Die kannst du zu Summierungen und Gruppierungen heranziehen. Falls der Kunde irgendwann mal eine andere Zeiteinteilung braucht, musst du nur den View ändern (evtl auch vom Programm aus)

zum Summieren sieh dir mal das an:
http://www.mysqltutorial.org/mysql-sum/
https://stackoverflow.com/questions/883 ... all-rollup

und falls du Gesamtsummen benötigst sieh die diese Syntax an:

Code: Alles auswählen
SELECT 
stunde, KassenNr, sum(Umsatz)
FROM
v_belege
GROUP BY stunde, KassenNr WITH ROLLUP


falls du es etwas heftiger haben möchtest kannst du den Zweck des View (Stundentagging) auch in die Abfrage einbauen
irgendwas wie:
Code: Alles auswählen
SELECT 
CASE WHEN HOUR(uhrzeit) <= 8 THEN 1
     WHEN HOUR(uhrzeit) BETWEEN 8 AND 9 THEN 8
     ......
     WHEN HOUR(uhrzeit) >= 17 THEN 17
     ELSE -1
END AS stunde
,KassenNr
, sum(Umsatz)
FROM
umsatz
GROUP BY stunde, KassenNr WITH ROLLUP
ORDER BY stunde, KassenNr


WITH ROLLUP macht dir die Geamtsummen und Zwischensummen -- für einen Report oder Chart weglassen, statdessen mit ORDER
Keine Ahnung ob das bei Firebird so klappt, bei MySQL klappt es.
so mal ins unreine und ungetestet reingetippt....

CT
charlytango
 
Beiträge: 104
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: FPC 3.0; Laz 1.6 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

Beitragvon aebding » 9. Nov 2017, 16:01 Re: Firebird SQL Abfrage

Hallo charlytango,

vielen Dank für die Anregungen ...

Die Werte sollen per LazReport ausgegeben werden und dienen der Personalplanung, z.B. wann ist der größte Andrang usw.

Werde das heute Abend mal testen und mich wieder melden ...
aebding
 
Beiträge: 14
Registriert: 4. Okt 2009, 23:08

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried