2017-04-13 2 views
0

Microsoft Visual Basic für Applikationen
-
SQL LEFT mit GROUP BY JOIN, & COUNT WHERE-KlauselSQL LEFT mit GROUP BY JOIN, COUNT & WHERE-Klausel (VBA)

Problem gelöst: Dank um den Link @Vityata zu teilen. Nachstehend ist der korrigierte Code für andere angegeben.

strSQL = "SELECT A.ID, A.Reason, COUNT(B.TimeStamp)" & _ 
"FROM tblReasons A " & _ 
"Left Join " & _ 
"(" & _ 
"SELECT TimeStamp, Reason FROM tblTracker " & _ 
"WHERE TimeStamp > #04/11/2017# and TimeStamp < #04/14/2017# " & _ 
")B ON A.ID = B.Reason " & _ 
" GROUP BY A.ID, A.Reason" 
+0

Nach meinem besten Wissen sollte die WHERE-Klausel nach der LEFT JOIN-Klausel sein. – Rory

+0

@Rory du hast Recht damit. Ich bekomme den Fehler nicht mehr, aber ich bekomme auch nicht die gewünschten Ergebnisse. Ich kann die JOIN- und WHERE-Klausel nicht ausführen. Ich versuche, die Anzahl aller tblReasons zu erhalten. Grund unabhängig davon, ob WHERE tblTracker.TimeStamp zurückgibt. Es sollte also 0 count anzeigen, wenn keine Ergebnisse mit WHERE-Klausel – illoosions

+0

gefunden werden. Es ist viel einfacher, wenn Sie mit der richtigen SQL-Syntax innerhalb von Access beginnen. Wenn in Access alles funktioniert und Sie das gewünschte Ergebnis erhalten, kopieren Sie die SQL-Anweisung in Excel-VBA und fügen Sie sie in Ihren Code ein. – Jochen

Antwort

1

Gehen Sie wie folgt vor.

  1. Gehen Sie zum unmittelbaren Fenster in VBE. (Strg + G). Dann füge den strSQL ein und drücke Enter in jeder Zeile. (siehe Bild unten)
  2. Dann fragen Sie VBE, was es durch die ganze Sache zu verstehen, indem Sie ?strsql schreiben und Enter drücken. (siehe Bild unten)
  3. VBE würde antworten. Überprüfen Sie die Antwort.
  4. Setzen Sie die Antwort als eine Abfrage in Access.
  5. Forschung & finden Sie das Problem.

enter image description here

Generell denke ich, dass GROUP BY und LEFT JOIN ein bisschen falsch, aber ich sollten die Daten sehen Sie mehr zu erzählen. SQL - Group By with Left Join

+0

Versuchen Sie 'HAVING' nach' GROUP BY' anstelle von 'WHERE' zu setzen. Und spiel ein bisschen. – Vityata

+0

Ein anderer Gedanke - überprüfen Sie die Daten. Z.B. 04/11 - ist es 4. November oder etwas Fälschung? Versuchen Sie, '# 11/04/2017 # und # 12/04/2017 #' zu schreiben, es könnte funktionieren. – Vityata

+0

Versuchen Sie einfach eine einfache Abfrage mit der Tabelle, nur 'Select * aus der Tabelle wo TblTracker.Timestamp zwischen # 04/11/2017 # und # 04/12/2017' Und versuchen Sie es von dort zu optimieren. – Vityata