Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: phyton2706 am Mai 05, 2011, 14:24:50

Titel: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 05, 2011, 14:24:50
Hallo Forum,

ich versuche durch eine Abfrage mehrere Datensätze zu einem Datum in einen Datensatz zusammen zu fassen.

Hier ein Beispiel:

Soll:
Datensatz 1:      AD-Nummer;1.2.2011;Hotelkosten;48,00€
Datensatz 2:      AD-Nummer;1.2.2011;Tanken;60,00€
Datensatz 3:      AD-Nummer;2.2.2011;Telefonkosten;15,00€
Datensatz 4:      AD-Nummer;3.2.2011;Tanken;60,00€

Nach der Abfrage hätte ich gerne:
Datensatz 1:      AD-Nummer;1.2.2011;48,00€;60,00€;
Datensatz 2:      AD-Nummer;2.2.2011;;;15,00€
Datensatz 3:      AD-Nummer;3.2.2011;;60,00€;

Leider bekomme ich trotz Gruppierung für die einzelnen Belegarten immer einen eigenen Datensatz...

Gibt es überhaupt eine Lösung für mein Problem?

Für Lösungsvorschläge währe ich sehr Dankbar!

Vielen Dank im voraus,

phyton2706
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 05, 2011, 15:32:19
Hallo,

natürlich lässt sich ein Datumsfeld gruppieren, innerhalb der Gruppe bekommst du aber keine Aufzählung der Werte in der Gruppe mit einer gruppierten Abfrage.

Hierzu gibt es aber Lösungen. Ein Bespiel hierzu ist in http://www.access-o-mania.de/forum/index.php?topic=14016  von mir dargestellt.

Dort ist in #4 ein Code für eine Funktion dargestellt bzw. in #5 in DB-Beispiel.

Du musst die Funktion für deinen Fall anpassen, dann bekommst du deine gewünschte Darstellung.

Gruß Oma

Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 05, 2011, 16:20:44
Hallo oma,

erst mal danke für Deine Hilfe!

Ich habe mir die BeispielDB mal angesehen, und werde daraus nicht ganz schlau...

Ich jetzt mal eine Kreuztabellen-Abfrage erstellt, und siehe da, die Daten sind so, wie ich sie haben möchte!

ABER...
Wenn ich nun die Kreuztabelle in die erste Abfrage mit angebe, bekomme ich nicht mehr alle Daten angezeigt, und die Funktionen werden auch nicht mehr erkannt...

Ich verzweifle langsam...


----------------------------
THX
phyton2706
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 05, 2011, 16:44:34
Hallo,

eine Kreuttabelle ist auch ein Lösungsansatz, das Ergebnis ist dann aber was anderes wie du als Wunsch dargestellt hast.
Bei der Kreuztabelle ist nur zu beachten, dass mit jeder neuen Kostenart, die tabelle breiter wird!

Und was läuft bei dir nicht?

Die Kreuztabelle wäre einfach zu erzeugen mit:

TRANSFORM Sum(DeineTabelle.Kosten) AS SummevonKosten
SELECT DeineTabelle.Datum_AD
FROM DeineTabelle
GROUP BY DeineTabelle.Datum_AD
PIVOT DeineTabelle.Art


ZitatABER...
Wenn ich nun die Kreuztabelle in die erste Abfrage mit angebe,...

und wie sollen wir nun raten, was das mit der Abfrage1 auf sich hat...?

Gruß Oma
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 06, 2011, 07:48:12
Guten morgen oma!

Das Problem ist, sobald ich die Kreuztabelle zu meiner eigentlichen Abfrage zufüge, werden nicht mehr alle benötigten Datensätze angezeigt...

Ich habe mal ein Datenbank mit Musterdaten geklöppelt...

phyton2706
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 06, 2011, 22:38:53
Hallo,

ZitatDas Problem ist, sobald ich die Kreuztabelle zu meiner eigentlichen Abfrage zufüge

und nun muss man nur noch raten können, welches denn wohl deine "eigentliche Abfrage" ist.

Aus der DB ist nicht zu erkennen, mit welcher Abfrage du noch was machen willst.

Was ist dein Ziel??

Gruß Oma
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 11, 2011, 12:21:09
Hallo zusammen,

nach reichlich lesen und testen, habe ich es nun endlich hinbekommen, die Kreuztabellen-Abfrage in die Spesen_Abf vernünftig zu integrieren...

Jetzt bekommen ich die Daten richtig angezeigt.

Allerdings fehlen jetzt die AD`s ab 37... In den zugrunde liegenden Tabellen und der Kreuztabellen-Abfrage bekomme ich alle AD`s angezeigt.

Hier das aktuelle SQL:


SELECT spesen_kopf.adm,
      spesen_kopf.datum,
      [Vorname] & ' ' & [Nachname]                  AS name,
      Format$([Spesen_Kopf.Datum], "MMMM")          AS monat,
      Format$([Spesen_Kopf.Datum], "YYYY")          AS jahr,
      spesen_kopf.tagesbeginn,
      spesen_kopf.[Ort-Start],
      spesen_kopf.tagesende,
      spesen_kopf.[Ort-Ende],
      Format$([Tagesende] - [Tagesbeginn], 'hh:mm') AS spesenzeit,
      spesen_kopf.[KM-Start],
      spesen_kopf.[KM-Ende],
      [KM-Ende] - [KM-Start]                        AS gefahren,
      spesen_kopf.[Privat-KM],
      spesen_kopf.[Spesen-Betrag],
      spesen_kopf.fruehstuecksabzug,
      belegart_abf.hotelkosten,
      [Hotel_MwSt] + [Fruehstueck_MwSt]             AS mwst_hotel,
      belegart_abf.[Telefon/Fax/Handy],
      belegart_abf.tanken,
      belegart_abf.nebenkosten,
      belegart_abf.wagenpflege,
      belegart_abf.parken,
      belegart_abf.[sonstige KFZ-Kosten]
FROM   belegart_abf
      INNER JOIN (((spesen_kopf
                    INNER JOIN spesen_belege
                      ON ( spesen_kopf.adm = spesen_belege.adm )
                         AND ( spesen_kopf.datum = spesen_belege.datum ))
                   INNER JOIN spesen_fehlzeiten
                     ON spesen_belege.adm = spesen_fehlzeiten.adm)
                  INNER JOIN ad_namen
                    ON spesen_kopf.adm = ad_namen.adm)
        ON ( belegart_abf.adm = spesen_kopf.adm )
           AND ( belegart_abf.datum = spesen_kopf.datum )
GROUP  BY spesen_kopf.adm,
         spesen_kopf.datum,
         [Vorname] & ' ' & [Nachname],
         Format$([Spesen_Kopf.Datum], "MMMM"),
         Format$([Spesen_Kopf.Datum], "YYYY"),
         spesen_kopf.tagesbeginn,
         spesen_kopf.[Ort-Start],
         spesen_kopf.tagesende,
         spesen_kopf.[Ort-Ende],
         spesen_kopf.[KM-Start],
         spesen_kopf.[KM-Ende],
         [KM-Ende] - [KM-Start],
         spesen_kopf.[Privat-KM],
         spesen_kopf.[Spesen-Betrag],
         spesen_kopf.fruehstuecksabzug,
         belegart_abf.hotelkosten,
         [Hotel_MwSt] + [Fruehstueck_MwSt],
         belegart_abf.[Telefon/Fax/Handy],
         belegart_abf.tanken,
         belegart_abf.nebenkosten,
         belegart_abf.wagenpflege,
         belegart_abf.parken,
         belegart_abf.[sonstige KFZ-Kosten],
         Format$([Spesen_Kopf.Datum], "MMYY")
HAVING ( ( ( spesen_kopf.adm ) LIKE [Bitte die AD-Nr oder nichts eingeben] & "*"
        )
        AND ( ( Format$([Spesen_Kopf.Datum], "MMYY") ) IS NOT NULL
              AND ( Format$([Spesen_Kopf.Datum], "MMYY") ) LIKE
                  [Bitte eingeben den Monat im Format  'MMJJ' eingeben] ) )
ORDER  BY spesen_kopf.adm,
         spesen_kopf.datum;


Könnt Ihr mir einen Tip geben, woran das liegen kann?

Zum evtl. besseren Verständnis habe ich die aktuelle Version abgehangen.





[Anhang gelöscht durch Administrator]
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 11, 2011, 13:17:33
Hallo,

ohne genau die Bedeutung der einzelnen Tabellen(Felder) zu kennen, würde ich mindestens so abfragen (Ohne Parameter):


SELECT
   Spesen_Kopf.ADM,
   Spesen_Kopf.Datum, [Vorname] & ' ' & [Nachname] AS Name,
   Format$([Spesen_Kopf.Datum],"MMMM") AS Monat,
   Format$([Spesen_Kopf.Datum],"YYYY") AS Jahr,
   Spesen_Kopf.Tagesbeginn,
   Spesen_Kopf.[Ort-Start],
   Spesen_Kopf.Tagesende,
   Spesen_Kopf.[Ort-Ende],
    Format$([Tagesende]-[Tagesbeginn],'hh:mm') AS Spesenzeit,
   Spesen_Kopf.[KM-Start],
   Spesen_Kopf.[KM-Ende],
   [KM-Ende]-[KM-Start] AS gefahren,
   Spesen_Kopf.[Privat-KM],
   Spesen_Kopf.[Spesen-Betrag],
   Spesen_Kopf.Fruehstuecksabzug,
   Belegart_Abf.Hotelkosten,
    [Hotel_MwSt]+[Fruehstueck_MwSt] AS MwSt_Hotel,
    Belegart_Abf.[Telefon/Fax/Handy],
   Belegart_Abf.Tanken, Belegart_Abf.Nebenkosten,
   Belegart_Abf.Wagenpflege, Belegart_Abf.Parken,
   Belegart_Abf.[sonstige KFZ-Kosten]
FROM Belegart_Abf
   RIGHT JOIN (((Spesen_Kopf LEFT JOIN Spesen_Belege ON (Spesen_Kopf.ADM = Spesen_Belege.ADM) AND (Spesen_Kopf.Datum = Spesen_Belege.Datum))
   LEFT JOIN Spesen_Fehlzeiten ON Spesen_Belege.ADM = Spesen_Fehlzeiten.ADM)
   RIGHT JOIN AD_Namen ON Spesen_Kopf.ADM = AD_Namen.ADM) ON (Belegart_Abf.ADM = Spesen_Kopf.ADM) AND (Belegart_Abf.Datum = Spesen_Kopf.Datum)
GROUP BY
   Spesen_Kopf.ADM,
   Spesen_Kopf.Datum,
   [Vorname] & ' ' & [Nachname],
    Format$([Spesen_Kopf.Datum],"MMMM"),
   Format$([Spesen_Kopf.Datum],"YYYY"),
   Spesen_Kopf.Tagesbeginn,
   Spesen_Kopf.[Ort-Start],
   Spesen_Kopf.Tagesende,
   Spesen_Kopf.[Ort-Ende],
   Spesen_Kopf.[KM-Start],
   Spesen_Kopf.[KM-Ende], [KM-Ende]-[KM-Start],
   Spesen_Kopf.[Privat-KM],
    Spesen_Kopf.[Spesen-Betrag],
   Spesen_Kopf.Fruehstuecksabzug,
   Belegart_Abf.Hotelkosten,
   [Hotel_MwSt]+[Fruehstueck_MwSt],
   Belegart_Abf.[Telefon/Fax/Handy],
   Belegart_Abf.Tanken,
   Belegart_Abf.Nebenkosten,
   Belegart_Abf.Wagenpflege,
   Belegart_Abf.Parken,
   Belegart_Abf.[sonstige KFZ-Kosten],
   Format$([Spesen_Kopf.Datum],"MMYY")
ORDER BY Spesen_Kopf.ADM, Spesen_Kopf.Datum;



Gruß Oma
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 11, 2011, 13:27:56
Hallo,

oder als DB

Gruß Oma

[Anhang gelöscht durch Administrator]
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 11, 2011, 13:43:52
Hallo Oma!

Vielen Dank für Deine Hilfe! Jetzt macht die Abfrage was ich möchte!  ;D

Nun ist mir noch eine Kleinigkeit aufgefallen...

Wenn ich die AD-Nr. '9' im Abfragefenster eingebe, dann werden auch die Nummern '971', '972' und '973' mit ausgegeben, es soll aber nur die '9' ausgegeben werden...

Wie kann ich das denn "abstellen"?



Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: oma am Mai 11, 2011, 14:05:42
Hallo,

ZitatWenn ich die AD-Nr. '9' im Abfragefenster eingebe, dann werden auch die Nummern '971', '972' und '973' mit ausgegeben, es soll aber nur die '9' ausgegeben werden...

naja, die Ergebnisse müssen ja auch so kommen, da du in deiner Parameter-Abfrage ja :

Wie [Bitte die AD-Nr oder nichts eingeben] & "*"

zu stehen hast; must wohl auf:  "Wie [Bitte die AD-Nr eingeben] "  umsteigen oder

Überhaupt: Parameterabfragen sind doch ein Greul, ich hoffe du machst das Ganze noch über ein Formular mit dynamischen SQL-Stings, wo du diese Probleme dann anders lösen kannst!!

Gruß Oma
Titel: Re: Lässt eine Abfrage es nicht zu, nach Datum zu Gruppieren?
Beitrag von: phyton2706 am Mai 11, 2011, 14:14:09
Hallo Oma,

vielen Dank für Antwort. So klappt es. Ich hoffe nur, dass die Kollegin, die damit Arbeiten muss diese Funktion nicht benötigt...

ZitatÜberhaupt: Parameterabfragen sind doch ein Greul, ich hoffe du machst das Ganze noch über ein Formular mit dynamischen SQL-Stings, wo du diese Probleme dann anders lösen kannst!!

Mit der Zeit werde ich auch Formulare zur komfortablen Dateneingabe einbinden, aber dynamische SQL-Strings? Da habe ich (bisher) keinen blassen schimmer von...

Erstmal vielen Dank!


P.S. Könntest Du den Beitrag mal in das richtige Unterforum schieben? Hier geht es ja eigentlich um Abfragen...