Anmelden

View Full Version : SQL Wochenauswertung



Albert Mayr
09-04-13, 09:08
Hallo!

Ich muss Lagerbewegungen pro Woche kumulieren. Da es keinen Buchungssatz in der KW 7 gibt, scheint diese in der Auswertung auch nicht auf.

Beispiel:
select (week_iso (bld#J || '-' || bld#M || '-' || bld#T)) as Woche, sum(fwzu)

from lib.file
where fir='001' and BUAR='ZF' and sais='60' and bld#>'20130101'
group by (week_iso (bld#J || '-' || bld#M || '-' || bld#T))

Ergebnis:
<table> <tbody><tr> <td>1</td> <td>2397</td> </tr> <tr> <td>2</td> <td>2412</td> </tr> <tr> <td>3</td> <td>1765</td> </tr> <tr> <td>4</td> <td>848</td> </tr> <tr> <td>5</td> <td>16</td> </tr> <tr> <td>6</td> <td>27</td> </tr> <tr> <td>8</td> <td>6440</td> </tr> </tbody></table>
Wie kann ich jetzt eine Zeile für KW7 als Ergebniszeile bekommen?

Albert

prsbrc
09-04-13, 12:11
Guten Tag!
Das würde mit einer Hilfstabelle gehen.
In dieser ein Feld in welcher man alle Wochennummern speichert und diese dann als Haupttabelle mittels left join Wochennummer mit deiner Tabelle verknüpft. Somit bekommt man an den Wochen wo nichts ist Null zurück.

Albert Mayr
10-04-13, 10:45
das hab ich inzwichen gemacht - wollte mir aber die Arbeit sparen :) - gibts da nichts eleganteres?

Fuerchau
10-04-13, 11:15
SQL kann keine Daten liefern, die nicht existieren.
Eine Hilfstabelle ist da also leider Voraussetzung.

Albert Mayr
10-04-13, 15:42
das hab ich befürchtet.
Problem ist inzwischen mit Hilfstabelle gelöst.
Danke für eure Hilfe.

Alfred E. Neumann
11-04-13, 16:20
Es geht auch anders, aber so geht es auch:


create table qgpl/td (woche dec(2), menge dec(5))

insert into td values(1, 10)
insert into td values(3, 30)

with recursive w (wo) as
(select 1 from sysibm/sysdummy1
union all
select wo+1 from w where wo < 53)
select wo, coalesce(menge, 0)
from w
left outer join td on wo = woche
order by wo

Fuerchau
11-04-13, 16:55
Und wo ist da die Berücksichtigung des Kalenders?
Nicht jedes Jahr hat die Woche 53!
Aber die Idee ist gut, du kannst anstelle der "1" ein Startdatum nehmen, da immer 7 Tage draufrechnen und die WEEK_ISO ermitteln.

Allerdings sollte noch ein Schluss-Where angegeben werden sonst läuft das bis ins Ultimo.

Alfred E. Neumann
11-04-13, 17:19
Und wo ist da die Berücksichtigung des Kalenders?
Erwischt! Es sollte nur ein technisches Beispiel sein. Für eine echte Lösung fehlen noch ein paar Dinge wie die Summenbildung usw.


Allerdings sollte noch ein Schluss-Where angegeben werden sonst läuft das bis ins Ultimo.
der ist im dynamischen Zweig (wo < 53)