Office: (Office 2016) Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden

Helfe beim Thema Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hi, ich schreib gerade an einem Programm zur Arbeitszeiterfassung. Hierzu nutze ich eine Access-Datenbank. Die gespeicherten Daten stehen in der... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Alde Oma, 13. Dezember 2018.

  1. Alde Oma Erfahrener User

    Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden


    Hi,

    ich schreib gerade an einem Programm zur Arbeitszeiterfassung.
    Hierzu nutze ich eine Access-Datenbank.

    Die gespeicherten Daten stehen in der Tabelle tbl_Zeiten.

    Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden tbl_Zeiten.jpg

    Nun möchte ich mir eine monatlich gruppierte Übersicht erstellen.

    Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden Übersicht.png

    Der Query dahinter sieht folgendermaßen aus:

    Code:
    SELECT YEAR(T1.Datum) AS Jahr, MONTH(T1.Datum) AS Monat, COUNT(T1.Datum) AS Soll
    FROM tbl_Zeiten AS T1, tbl_Zuschläge T2
    WHERE (T2.Vorlage_ID = 1 OR T2.Vorlage_ID = 2) AND T1.Zuschläge_ID = T2.ID
    GROUP BY MONTH(T1.Datum), YEAR(T1.Datum);
    Das funktioniert, wenn pro Tag nur ein Eintrag vorhanden ist. Nun kann es aber vorkommen, dass für einen Tag mehrere Einträge vorhanden sind. Das soll natürlich als 1 Tag gezählt werden. Es stimmt also die Rückgabe von COUNT nichtmehr. Bei November sollten jetzt auch 20, nicht 22 Tage als Soll stehen.

    Wie muss ich meine Abfrage ändern, damit der COUNT keine doppelten Einträge zählt?

    MfG Oma
     
    Alde Oma, 13. Dezember 2018
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    wie sieht es bei folgender SQL-Abfrage aus?
    Code:
    SELECT DISTINCT Year(T1.Datum) AS Jahr, Month(T1.Datum) AS Monat, Count(T1.Datum) AS Soll
    FROM tbl_Zeiten AS T1 INNER JOIN tbl_Zuschläge AS T2 ON T1.Zuschläge_ID = T2.ID 
    WHERE (((T2.Vorlage_ID)=1 Or (T2.Vorlage_ID)=2))
    GROUP BY Year(T1.Datum), Month(T1.Datum);
     
    Exl121150, 13. Dezember 2018
    #2
  3. Alde Oma Erfahrener User
    Hi,

    leider genauso wie oben. Der Count enthält die doppelten Einträge.
     
    Alde Oma, 13. Dezember 2018
    #3
  4. Exl121150 Erfahrener User

    Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden

    Hallo,

    da ich deine Abfrage nicht wirklich ausprobieren kann mangels Tabellen mit testbaren Daten, noch ein letzter Versuch, indem du das Schlüsselwort "DISTINCT" durch "DISTINCTROW" ersetzt, also:
    Code:
    SELECT [B]DISTINCTROW[/B] Year(T1.Datum) AS Jahr, Month(T1.Datum) AS Monat, Count(T1.Datum) AS Soll
    FROM tbl_Zeiten AS T1 INNER JOIN tbl_Zuschläge AS T2 ON T1.Zuschläge_ID = T2.ID 
    WHERE (((T2.Vorlage_ID)=1 Or (T2.Vorlage_ID)=2))
    GROUP BY Year(T1.Datum), Month(T1.Datum);
    Normalerweise bewirkt diese Klausel die Eindeutigkeit, falls mehrere Tabelle bei der Abfrage beteiligt sind - nur ist mir nicht ganz klar, ob auch diese Tabellen in der Feldliste der SELECT-Klausel aufscheinen müssen, um einen Effekt zu bewirken. Da bei dir zwar 2 Tabellen, die mittels "INNER JOIN" verknüpft sind, beteiligt sind, jedoch alle 3 Felder (Jahr/Monat/Soll) der SELECT-Liste aus der Tabelle mit Alias T1 stammen, weiß ich nicht, ob sich dadurch etwas ändert.
    Aber ein Versuch dürfte es wert sein!
     
    Exl121150, 14. Dezember 2018
    #4
  5. Alde Oma Erfahrener User
    Auch das geht leider nicht.
    Anbei die abgespeckte Version meiner DB.
     
    Zuletzt bearbeitet: 15. Dezember 2018
    Alde Oma, 14. Dezember 2018
    #5
  6. Exl121150 Erfahrener User
    Hallo,

    ich habe mit deiner Beispieldatenbank das Ganze durchprobiert. Die Lösung des Problems sind folgende 2 Abfragen, die man aber auch zu 1 Abfrage kombinieren kann.

    Zuerst jedoch die beiden (Einfach)Abfragen:
    Code:
    SELECT DISTINCT Year(T1.Datum) AS Jahr, Month(T1.Datum) AS Monat, T1.Datum AS DatS
    FROM tbl_Zeiten AS T1 INNER JOIN tbl_Zuschläge AS T2 ON T1.Zuschläge_ID = T2.ID
    WHERE (T2.Vorlage_ID=1 Or T2.Vorlage_ID=2);
    
    Diese 1. Abfrage habe ich "Abfr_ZuschlgZeiten" genannt. Auf diese greift die folgende Gruppierungsabfrage zu:
    Code:
    SELECT AZZ.Jahr, AZZ.Monat, Count(AZZ.DatS) AS Soll
    FROM Abfr_ZuschlgZeiten AS AZZ
    GROUP BY AZZ.Jahr, AZZ.Monat;
    
    Diese habe "Abfr_Anzahlen" genannt.

    Da die Abfrage "Abfr_Anzahlen" auf die 1. Abfrage "Abfr_ZuschlgZeiten" zugreift, kann man beide ineinander verschachteln zu einer einzigen Abfrage:
    Code:
    SELECT AZZ.Jahr, AZZ.Monat, COUNT(AZZ.DatS) AS Soll
    FROM (SELECT DISTINCT Year(T1.Datum) AS Jahr, Month(T1.Datum) AS Monat, T1.Datum AS DatS
          FROM tbl_Zeiten AS T1 INNER JOIN tbl_Zuschläge AS T2 ON T1.Zuschläge_ID = T2.ID
          WHERE (T2.Vorlage_ID=1 Or T2.Vorlage_ID=2)) AS AZZ
    GROUP BY AZZ.Jahr, AZZ.Monat;
    
    Diese habe ich "Abfr_ZuschlgZeiten_Anzahlen" genannt - du kannst dafür auch jeden beliebigen anderen - gültigen - Namen vergeben.
    Diese letzte Abfrage müsste die Lösung deines Problems sein.
     
    Exl121150, 17. Dezember 2018
    #6
  7. Alde Oma Erfahrener User
    Super, funktioniert Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden :cool:
    Vielen Dank für die Hilfe.
     
    Alde Oma, 17. Dezember 2018
    #7
Thema:

Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden

Die Seite wird geladen...
  1. Abfrage mit mehreren Spalten, DISTINCT nur auf eine Spalte anwenden - Similar Threads - Abfrage mehreren Spalten

  2. ActiveX Mehrere Checkboxen abfragen bei Button onclick

    in Microsoft Excel Hilfe
    ActiveX Mehrere Checkboxen abfragen bei Button onclick: Hey Leute habe ein Button erstellt der bei Click alles was mit der Checkbox makiert ist (Produktion) der Wert "Ist-Bestand" um 1 erhöht. mit einer Checkbox funktioniert supi bekomme es...
  3. SVerweis, WennDann oder Makro

    in Microsoft Excel Hilfe
    SVerweis, WennDann oder Makro: Hallo zusammen, Ich habe zwar ähnliche Themen gefunden aber komme trotzdem bei meinem Problem nicht weiter. Anbei meine Beispieldatei, da die echten Daten viel umfangreicher sind. Ich würde...
  4. Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen

    in Microsoft Access Hilfe
    Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen: Hallo zusammen, ich stehe gerade vor dem Problem, dass ich die Datensätze zwischen zwei Tabellen nicht verknüpfen kann. Konkret habe ich die beiden Tabellen tblEigenschaft und tblBasis. In der...
  5. Bitte um Hilfe / Kreuztabelle / Tabellenköpfe / Werte

    in Microsoft Excel Hilfe
    Bitte um Hilfe / Kreuztabelle / Tabellenköpfe / Werte: Hallo liebes Forum, ich bin noch recht neu in Excel unterwegs, meine Erfahrungen haben sich bisher auf einfachste Formeln, Layouts und Diagramme beschränkt. Bisher konnte ich mir mit Youtube...
  6. PQ Abfragen funktionieren nach Update nicht mehr

    in Microsoft Excel Hilfe
    PQ Abfragen funktionieren nach Update nicht mehr: Guten Morgen Excel Gemeinde, nachdem wir nun von Excel 2010 auf 2016 umgestellt wurden, funktionieren fast alle in 2010 erstellten PQ Abfragen nicht mehr. Die Fehlermeldung ist bei allen Abfragen...
  7. VBA mehrere Spalten abfragen, kopieren einfügen

    in Microsoft Excel Hilfe
    VBA mehrere Spalten abfragen, kopieren einfügen: Hi zusammen, mit folgendem code frage ich mehrere sheets ab und eine Spalte (C) und wenn in der Spalte ein X steht kopiert er mir die ganze Zeile und fügt sie mir auf Tabelle1 ein. Jetzt möchte...
  8. MAX-Funktion in Abfrage mit mehreren Werten

    in Microsoft Access Hilfe
    MAX-Funktion in Abfrage mit mehreren Werten: Hallo, ich grüble gerade über einer Abfrage - und bekomme es einfach nicht hin. Ich habe folgende Tabellen in der Abfrage Bezeichnung - Befund - Station - Schadensgröße NE01 - BCAX - 1,50 - 150...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden