hammerle Geschrieben 15. September 2009 Geschrieben 15. September 2009 Ich hoffe jemand kann mir bei folgendem Problem helfen: Wir haben eine ganz tolle Jahresumsatztabelle in dem die Jahreszahl auch schön als Spalte und die Jahreszahlen als Werte vorhanden sind. Die Erträge der Monate sind als Spalten einzeln als VK01 bis VK12 vorhanden. Es soll angegeben werden können die Jahreszahl, der Startmonat und ich denke mal die Laufzeit in Monaten macht am meisten Sinn. Wie bekommt man das hin, dass man sie Summen aus zwei Jahren bildet? Z.B Juli 2008 bis Januar 2009? Zitieren
robotto7831a Geschrieben 15. September 2009 Geschrieben 15. September 2009 Hallo, nach kurzem Überlegen würde ich es als Stored Procedure mit dynamsichen SQL lösen und in der Proc das Statement zusammenbauen. Frank Zitieren
dr.dimitri Geschrieben 15. September 2009 Geschrieben 15. September 2009 Wir haben eine ganz tolle Jahresumsatztabelle in dem die Jahreszahl auch schön als Spalte und die Jahreszahlen als Werte vorhanden sind. Ich denke das mit der tollen Tabelle war jetzt ironisch gemeint oder? Mit einem SQL wirst Du da nicht weiterkommen. Der Ansatz mit der SP war aber schon richtig. Du brauchst einen Cursor mit dem Du immer die kompletten Zeilen Selektierst die innerhalb deiner Jahreseinschränkung liegen. In Deinem beispiel also WHERE JAHR BETWEEN 2008 AND 2009 sind zwei Datensätze als Ergebnis. Dann musst Du in deinem Programm bei der Spalte beginnen die als Startmonat gewünscht ist und von dort aus die einzelnen Werte zusammenzählen, bis Du in der zweiten Zeile beim gewünschten Endmonat bist. Wäre die Tabelle wirklich toll, dann wäre pro Monat ein Satz mit Datumsangabe (Als DATE datentyp) und Umsatz vorhanden und Du könntest es mit einem einfachen SQL ermitteln. Dim Zitieren
hammerle Geschrieben 16. September 2009 Autor Geschrieben 16. September 2009 Das tollste ist ja, dass ich erst seit ein paar Tagen mit PL/SQL arbeite und gleich eine Jahresumsatzaufstellung basteln soll. Die Tabelle sieht grob so aus: Spalten: Jahr, vk01, vk02 -> vk12 (Für die Monate 1-12) und haben wollen sie: einen Variabelen monatsumsatz letztes jahr, Variablen monatsumsatz dieses jahr, Aufgelaufener Umsatz letztes jahr, Aufgelaufener Umsatz dieses jahr, Aufgelaufener Umsatz dieses Jahr Rumpf, (Jan-Jun) Aufgelaufener Umsatz letztes Jahr, (Jul-...Variabel) Aufgelaufener Umsatz dieses Jahr, (Jul-...Variabel) axo und das ganze auch noch über 16 verschiedene Warengruppen hinweg ^^ Eine Abfrage habe ich schon einmal gemacht die siehr so aus: Die anderen 16 sehen ähnlich aus. (select 11 as veg,sum(vk&monat) as Monat_&monat, decode(&monat, 01, sum(vk01), 02, (sum(vk01) + sum(vk02)), 03, (sum(vk01) + sum(vk02) + sum(vk03)), 04, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04)), 05, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05)), 06, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06)), 07, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07)), 08, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07) + sum(vk08)), 09, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07) + sum(vk08) + sum(vk09)), 10, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07) + sum(vk08) + sum(vk09) + sum(vk10)), 11, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07) + sum(vk08) + sum(vk09) + sum(vk10) + sum(vk11)), 12, (sum(vk01) + sum(vk02) + sum(vk03) + sum(vk04) + sum(vk05) + sum(vk06) + sum(vk07) + sum(vk08) + sum(vk09) + sum(vk10) + sum(vk11) + sum(vk12)) ) as aufgelaufen from t154wast t where jahr=&jahr and stufe=' ' and wabe='01' and (Hwgr='05' or hwgr='12' or Hwgr='25') group by wabe ) union all Zitieren
dr.dimitri Geschrieben 16. September 2009 Geschrieben 16. September 2009 Also in diesem Fall würde ich so vorschlagen die daten erstmal in eine vernünftige Form zu bringen. Sprich Du lässt dir vom DBA ein eigenes Schema anlegen in dem Du Tabellen erzeugst die eine korrekte Struktur haben. In deinem Beispiel wäre dann für jeden Monat eine eigene Spalte mit Datum und eine weitere Spalte mit dem Umsatz sowie ggf. noch weitere Spalten. Dann schreibst Du dir einmalig eine Prozedur die diese Tabelle befüllt und kannst anschließend einfach per SQL auf deine Umsetztabelle zugreifen. Damit investierst Du nur einmalig Arbeit um es richtig zu machen und kannst die restlichen Anforderungen quasi aus dem Ärmel schütteln. Wichtig ist natürlich auch noch, dass Die Umsetztabelle mitgepflegt wird wenn sich Änderungen ergeben. das wäre z.B. über einen Trigger möglich oder falls das nicht erlaubt ist, könnte dir der DBA einen Datenbankjob einrichten, der diese Tabellen in der Nacht komplett neu aufbaut (monatliche Umsatzangaben lassen ja nicht grade auf eine sekundengenaue Datenqualität schließen) Dim Zitieren
hammerle Geschrieben 17. September 2009 Autor Geschrieben 17. September 2009 Vielen Dank für eure Hilfe! Ich denke mal auch, dass ich das ganze umlegen werde. So macht das wirklich keinen Sinn. VG Christof Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.