2017-09-21 4 views
1

Ich habe diese Anfrage:JOIN mit WHERE-Klausel

Select 
    Tbl1.field1, 
    count (*) as total 
from Tbl1 
LEFT JOIN Tbl2 on Tbl1.geoid=Tbl2.field1 
LEFT JOIN Tbl3 L on Tbl2.Field2 = L.Field2 
and Tbl2.[Current Original Listing Date] >= Convert(datetime, '2017-08-01') 
GROUP BY Tbl1.field1 

Tbl1.field1 eine statische Liste Ich brauche die Gesamtheit unabhängig von der Anzahl der TBL3 ausgegeben wird.

mein Problem ist, dass, wenn ich das Datum in der Where-Klausel straffen, erwarte ich mehr Null in der Spalte zählen, aber wenn die Anzahl auf Null geht, geht der Datensatz.

was fehlt mir? Danke.

+0

müssen Sie möglicherweise Ihre Beispieldaten in diesen Tabellen anzeigen und erwartetes Ergebnis –

+0

Führen Sie diese genaue Abfrage und sehen keine Ergebnisse oder führen Sie es mit einer WHERE-Klausel? Where-Klauseln und Links-Joins können ähnliche Ergebnisse wie ein Inner-Join erzeugen (wodurch einige Zeilen entfernt werden), aber die Abfrage, wie Sie sie gerade geschrieben haben, sollte das nicht tun. – ZLK

+0

Fügen Sie sql hinzu, um Ihre Tabellen und Mock-Daten zu erstellen. –

Antwort

1

Legen Sie die Datumseinschränkung innerhalb der Verknüpfung der Tabelle es verweist:

SELECT 
    Tbl1.field1, 
    count (*) as total 
FROM Tbl1 
LEFT JOIN Tbl2 ON Tbl1.geoid = Tbl2.field1 
       AND Tbl2.[Current Original Listing Date] >= '20170801' 
LEFT JOIN Tbl3 L on Tbl2.Field2 = L.Field2 
GROUP BY Tbl1.field1 

nicht sicher, warum Sie TBL3 beitreten, aber wenn es dann schließen benötigt wird.

Hinweis: Wenn Sie CONVERT() zu datetime aus einem Literal verwenden, sollten Sie die Style-Nummer angeben, da Sie sonst auf Servereinstellungen angewiesen sind. Ansonsten ist das sicherste Datum in SQL Server JJJJMMTT und dann müssen Sie nicht konvertieren oder umwandeln.