2016-10-11 1 views
0

Ich habe gerade angefangen zu lernen SQL und ich habe eine VBA-Funktion, die ich in eine einfache SQL konvertieren möchte. Ich habe 4 Tabellen, die verbunden werden müssen, dann brauche ich eine Gesamtzählung mit Datum> Datum1 & Datum < Datum2 und Status = Status_String und Count = CountName (Datum1, Datum2, Status_String, County Namen sind Variablen).Join und Count Records SQL vba Zugriff

SELECT COUNT(*), table1.date, table2.status, table3.county 
FROM table1 
INNER JOIN table1 ON table1.status=table2.staus 
INNER JOIN table1 ON table1.cust_id=table3.cust_id 
INNER JOIN table3 ON table3.countyid=table4.countyname 
WHERE table4.status = Status_string and [table1.Date] > date_varaible_1 and [table1.Date] < date_varaible_2 and [table.county]=countyname 

jede Hilfe, um dies zu korrigieren wäre großartig.

ty

+0

Sie können nur eine 'GROUP BY'-Klausel verpassen, aber sind Sie sicher, dass die Kreis-ID von Tabelle 3 mit dem Kreisnamen von Tabelle 4 übereinstimmt? Scheint inkonsistent. – Parfait

+0

Ja, ich habe sie nur anders benannt. Ich würde es umbenennen, aber es würde viel Code neu schreiben. – user1504725

+0

Wie würde ich die Gruppenklausel einschließen? – user1504725

Antwort

0

Mehrere Dinge müssen Anpassungen in Ihrer Suchanfrage:

  1. JOIN Aussagen nicht korrekt sind, wie Sie Table1 sich mehrmals schließen sich (was für zulässig ist selbst schließt sich), aber Sie dann beziehen Sie sich auf Table2, Table3, und Table4, die nicht existieren. Einfach beitreten durch diese Tabellen. Möglicherweise waren das einfache Tippfehler.
  2. MS Access SQL erfordert Klammern um Tabellen Join Pairings.
  3. Klammern müssen um einen Tabellennamen oder einen Feldnamen gewickelt werden. Zwei Klammern können nicht beide umbrechen, obwohl zwei Sätze von Klammern verwendet werden können: [table].[field].
  4. Fügen Sie am Ende der Abfrage eine GROUP BY hinzu. In SQL werden alle nicht aggregierten Spalten (oder Einheitenebenen) in SELECT einer Aggregatabfrage als Gruppierungen betrachtet und müssen daher in einer GROUP BY deklariert werden.
  5. Betrachten wir eine BETWEEN Klausel für Ihren Bereich Datum wie bei Query Performance Tips empfohlen:

    Zwischen lässt die Suchmaschine sucht Werte in einer Bewertung statt zwei

SQL Abfrageeinstellung

SELECT COUNT(*), table1.date, table2.status, table3.county 
FROM ((table1 
INNER JOIN table2 ON table1.status = table2.staus) 
INNER JOIN table3 ON table1.cust_id = table3.cust_id) 
INNER JOIN table4 ON table3.countyid = table4.countyname 
WHERE table1.[Date] BETWEEN date_variable_1 AND date_variable_2 
    AND table3.[county] = countyname 
    AND table4.[status] = Status_string 
GROUP BY table1.date, table2.status, table3.county