praktikantin
Goto Top

Gruppierung (merkwürdiges Datum Format ist Schuld daran)

Hallo Leute,

ich habe noch ein kleines Problem... Tut mir leid dass ich euch nerve aber mein Praktikum endet diese Woche und keiner zeigt mir etwas face-sad Na wenigstens bekomme ich immer Hilfe von euch. Wie gesagt ich arbeite an ein paar wirklich schlecht organisierten Datenbanken. Ich benutze diese Abfrage:

SELECT '20'+Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),3,2) AS Jahr, Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),5,2) AS Monat, AMFLIBX_MBBFRES0.bfc7cd, AMFLIBX_MBDDREP.DDAITX, Sum(AMFLIBX_MBDDREP.ddduva) AS Summevonddduva
FROM (((AMFLIBX_MBF9REP LEFT JOIN AMFLIBX_MBBFREP ON (AMFLIBX_MBF9REP.FEABBJ = AMFLIBX_MBBFREP.CUSNO) AND (AMFLIBX_MBF9REP.FEAENB = AMFLIBX_MBBFREP.COMNO)) INNER JOIN AMFLIBX_MBBFRES0 ON AMFLIBX_MBF9REP.FEKNNB = AMFLIBX_MBBFRES0.BFCANB) INNER JOIN (AMFLIBX_MBDHREP INNER JOIN (AMFLIBX_MBDDREP LEFT JOIN AMFLIBX_ITEMASA ON AMFLIBX_MBDDREP.DDAITX = AMFLIBX_ITEMASA.ITNBR) ON (AMFLIBX_MBDHREP.DHAENB = AMFLIBX_MBDDREP.DDAENB) AND (AMFLIBX_MBDHREP.DHDCCD = AMFLIBX_MBDDREP.DDDCCD) AND (AMFLIBX_MBDHREP.DHCVNB = AMFLIBX_MBDDREP.DDCVNB) AND (AMFLIBX_MBDHREP.DHK4NB = AMFLIBX_MBDDREP.DDK4NB)) ON (AMFLIBX_MBF9REP.FEGGNB = AMFLIBX_MBDHREP.DHGGNB) AND (AMFLIBX_MBF9REP.FEHYNB = AMFLIBX_MBDHREP.DHHYNB) AND (AMFLIBX_MBF9REP.FEABBJ = AMFLIBX_MBDHREP.DHCANB)) LEFT JOIN AMFLIBX_MBDZREP ON AMFLIBX_MBBFREP.TERRN = AMFLIBX_MBDZREP.DZC0CD
GROUP BY '20'+Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),3,2), Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),5,2), AMFLIBX_MBBFRES0.bfc7cd, AMFLIBX_MBDDREP.DDAITX, AMFLIBX_MBF9REP.FEGGNB, AMFLIBX_MBF9REP.FEGHNB, AMFLIBX_MBBFREP.TERRN
HAVING (((AMFLIBX_MBF9REP.FEGHNB)>=1070101 And (AMFLIBX_MBF9REP.FEGHNB)<=1100101) AND ((AMFLIBX_MBBFREP.TERRN)=2))
ORDER BY '20'+Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),3,2), Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),5,2), AMFLIBX_MBBFRES0.bfc7cd, AMFLIBX_MBDDREP.DDAITX;

Nach dieser Abfrage bekomme ich dann die Folgende Tabelle: Jahr, Monat, Kundenklasse (bfc7cd), Arikelnummer (DDAITX) und die verkaufszahlen (ddduva als Summe). Das Datum ist in dieser tabelle FEGHNB und hat diese blöde Form "1070101". Damit ich das Jahr und die Monate bekomme habe ich einfach (wie ihr sehen könnt) die mid () Funktion benutzt. Mein Problem ist aber dass ich nicht die Verkaufszahlen von jedem einzelnen Tag brauche sondern die jedes Monats Summiert. Ich habe schon versucht die FEGHNB auszuschiessen (in der Entwurfsansicht) aber dann hat Access für gut 1 Stunde die Daten ausgesucht (und war immer noch nicht fertig) und das dauert einfach viel zu lange... Hat vielleicht jemmand eine idee?

Hier sind ein paar Bilder:

c486a2e2b3c4cf394c545005e150fee7-zwischenablage02
76edaba34a64e2f94c4c70d9800580f1-zwischenablage01

Wie ihr sieht sind die Artikel doppelt aufgelistet weil sie auch den Tag berücksichtigen:
c0a3b0fe2af1e857fec9fb5ca384ffda-zwischenablage03

Wie kann ich nur anhand der 4 ersten Spalten (ohne den Tag) die Daten Gruppieren und dann die Summe für jeden Arikel für jeden Monat bekommen? Und an dem ist dieses blöde Datum schuld... Kann ich es irgendwie hinbekommen? Ich bitte euch um euren Rat und eure Hilfe!!!

Viele Grüße Julia

Content-Key: 57362

Url: https://administrator.de/contentid/57362

Printed on: May 4, 2024 at 20:05 o'clock

Member: Biber
Biber Apr 23, 2007 at 16:28:13 (UTC)
Goto Top
Moin Praktikantin,

sagen wir so... außer PraktikantInnen haben Deine momentanen Brötchengeber offensichtlich auch noch niemand an diese Datentabellen herangelassen...

Haben die eine grönlandische Datenbank ins Serbokroatische übersetzen lassen oder bei der Vergabe der Feld- und Tabellennamen nur mit dem Ellenbogen auf die Tastatur gehauen?

Oder kommt das alles aus der bekannten Softwareschmiede von Jim Beam und Johnnie Walker?

Egal, ich würde es versuchen mit zwei Schritten Abstand...und einfach nochmal gucken.

--> Die Auswertung soll gruppiert werden nach (Monat+Jahr von) Datum, Kundengruppe und Artikelnummer

Die GROUP BY-Clause geht aber noch viel weiter.
Da willst Du vielleicht noch SORTieren nach "AMFLIBX_MBF9REP.FEGGNB, AMFLIBX_MBF9REP.FEGHNB, AMFLIBX_MBBFREP.TERRN", aber nicht GROUPieren.

Die GROUP BY-Clause ist drei Felder zu lang (=drei Felder länger als die ORDER BY-Clause.
Und eine Group By UND eine ORDER BY nach den gleichen Kriterien muss auchnicht sein.

Kürze die GROUP-BY, setze statt dem Kriterium "'20' + Mid..(.bla.)' ein schlichtes 'Left( str([AMFLIBX_MBF9REP].[FEGHNB]),5)' ein.
und starte den Krempel noch mal.

Gruss Biber
Member: Praktikantin
Praktikantin Apr 23, 2007 at 16:49:52 (UTC)
Goto Top
Hallo Biber und danke für die schnelle Antwort,

ich habe wirklich sehr viele Probleme mit diesen Datenbanken... Man wird durch den Namen der Datenbanken/Tabellen nicht schlau, es sind einfach zuviele und sehr viele sind überdimensional groß (viele davon sind nicht zu gebrauchen). Weiß auch nicht woher die stammen... Ich werde noch verrückt. Ich werde morgen deinen Tipp Befolgen und ich hoffe es klappt diesmal. Diese merkwürdige Datum Spalte(FEGHNB mit der blöden Form "1070101") kann ich nicht rausnehmen (denke ich). Hat diese irgend einen Einfluss bei der Gruppierung der Tabelle? Vielen Dank für Deine Hilfe nocheinmal!!!! face-smile
Member: Biber
Biber Apr 23, 2007 at 17:10:30 (UTC)
Goto Top
Moin Praktikantin,

Du brauchst da nichts rausnehmen und Dich vor allen Dingen nicht verrückt machen lassen durch dieses Blendwerk von kryptischen Feld- und Tabellennamen.
Diese Verwirrspiele haben Methode - einige Unternehmen wie z.B. SAP haben sich mit diesem konsequenten Werfen von solchen undurchschaubaren Nebelgranaten eine marktbeherrschende Position ergaunert. *gg
Ist ja der Sinn derartiger "Datenmodellierung", dass kein Aussenstehender so einen Haufen Mist ohne Hilfe der System-Verkäufer pflegen oder warten kann.

Also, nochmal... zwei Schritte zurücktreten und nochmal draufschauen:

Es kommt ganz genau das Gleiche heraus, ob Du nun ein GROUP BY machst nach
GROUP BY '20'+Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),3,2), Mid(Str([AMFLIBX_MBF9REP].[FEGHNB]),5,2), AMFLIBX_MBBFRES0.bfc7cd, AMFLIBX_MBDDREP.DDAITX 
----> '20' +'07' +'01'.... +kundenart...+ Artikelnr 
--oder nach --
GROUP BY LEFT( str( [AMFLIBX_MBF9REP].[FEGHNB]), 5) + ...
---->'10701' ...+ kundenart ..+ Artikelnummer. 
Nur: die Group-by-Clause muss auch mit dem "Artikelnr" zu Ende sein.

Ob Du das Datum als Monat und Jahr mit anzeigst oder nicht, das hat mit der Anzahl der Ergebnissätze nichts zu tun.

Und wenn das Ganze dann morgen immer noch so stinkelangsam sein sollte, dann ersetzen wir mal die merkwürdigen INNER JOINS durch normale WHERE-Bedingungen.
Dann könnte der Klamauk vielleicht sogar lesbar werden. Und etwas performanter.

Gruss
Biber
Member: Praktikantin
Praktikantin Apr 23, 2007 at 18:38:37 (UTC)
Goto Top
Hallo Biber,

vielen dank noch einmal für die Hilfe und die Erklärung. Ich arbeite ja das erste mal in einer Firma und habe mich schon gefragt warun die solche blöden Namen verwenden... Na ja, jetzt weiß ich es wenigstens. Wie gesagt ich versuche es morgen und ich denke es wird klappen.
Vielen lieben dank! face-smile

Viele Grüße
Julia
Member: Praktikantin
Praktikantin Apr 24, 2007 at 07:34:11 (UTC)
Goto Top
Guten morgen Biber,

es hat geklappt!!!! Vielen dank für Deine Hilfe. Habe auch den Left.... Befehl in SQL ausprobiert aber das hat der PC nicht verkraftet (zu wenig Speicher drauf (obwohl 39,6 GB frei waren) face-sad). Ich habe auch alle outer joins mit inner Joins ersetzt. Wie denkst konnte ich die Beziehungen erstellen? Ich habe einfach improvisiert und einfach die Beziehungen die schon in Cognos erstellt worden sind übernohmen... Wer hätte sonst Zeit mir all das zu zeigen und die Beziehungen zu erklären? Die hatten damals in Cognos outer Joins erstell, also wußte ich nicht ob es mit den inner Joins das gleiche Ergebnis rauskommt. Aber ich habe die gleichen Zahlen bekommen. Danke für Deine Hilfe nocheinmal! Du hast mir wirklich mehr als geholfen!!!!

Viele Grüße
Julia