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 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:
Wie ihr sieht sind die Artikel doppelt aufgelistet weil sie auch den Tag berücksichtigen:
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
ich habe noch ein kleines Problem... Tut mir leid dass ich euch nerve aber mein Praktikum endet diese Woche und keiner zeigt mir etwas 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:
Wie ihr sieht sind die Artikel doppelt aufgelistet weil sie auch den Tag berücksichtigen:
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 57362
Url: https://administrator.de/forum/gruppierung-merkwuerdiges-datum-format-ist-schuld-daran-57362.html
Ausgedruckt am: 26.12.2024 um 01:12 Uhr
5 Kommentare
Neuester Kommentar
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
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
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
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
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.
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