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 **
Firebird SQL Abfrage
-
- Beiträge: 1058
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
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
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:
falls du es etwas heftiger haben möchtest kannst du den Zweck des View (Stundentagging) auch in die Abfrage einbauen
irgendwas wie:
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
.. 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
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
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
Keine Ahnung ob das bei Firebird so klappt, bei MySQL klappt es.
so mal ins unreine und ungetestet reingetippt....
CT
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 ...
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 ...