Wenn Sie SQL Server verwenden, setzen Sie die Daten in einfache Anführungszeichen. Wenn nicht, wird der Ausdruck anstelle des Datums ausgewertet.
%Vor%Ich habe einen Join mit mehreren Tabellen (nur zwei im Beispiel), in dem ich alle Zeilen aus der Basistabelle behalten muss. Offensichtlich verwende ich einen LINKEN JOIN, um alle Zeilen in der Basistabelle einzubeziehen. Ohne die WHERE-Klausel funktioniert es großartig - Wenn eine Zeile in der rechten Tabelle nicht existiert, wird die Zeile aus der linken Tabelle immer noch angezeigt, nur mit einer 0 aus der Spalte in der rechten Tabelle. Die ersten beiden Zeilen im Dataset sind Labels aus der linken Tabelle und Anzahl der Zeilen aus der rechten Tabelle, gruppiert nach Label. Alles, was ich will, ist eine Zählung von 0, wenn einem Label kein Wert aus Tabelle2 zugewiesen ist.
Tabelle1
%Vor%Tabelle2
%Vor%Abfrage :
%Vor%Gutes Ergebnis - Keine Filter
%Vor%Großartig!
Mein Problem ist, dass, wenn ich Filterkriterien hinzufüge, um Zeilen aus der Right-Tabelle zu entfernen, die Zeile für meine Links-Join-Zeilen entfernt wird (sie werden auf Null gesetzt), werden die Linken Zeilen gelöscht. Ich brauche die Linken Zeilen, um auch dann zu bleiben, wenn ihre Anzahl auf Null gefiltert ist.
%Vor%Bummer Result Set - Nach Filtern
%Vor%Dukes!
Also, was zur Hölle? Muss ich eine temporäre Tabelle mit dem gefilterten Dataset erhalten THEN verbinden Sie es mit der linken Tabelle? Was vermisse ich? Danke!
Führen Sie einen zweiten oder rekursiven Join aus. Holen Sie sich meine "gute" Join-Tabelle, holen Sie sich eine zweite "gefilterte" Tabelle, dann LINKS verbinden Sie sie
Sie filtern nach der zweiten Tabelle in where
. Die Werte könnten NULL
sein und NULL
schlägt die Vergleiche fehl.
Verschieben Sie die Bedingung where
in die on
-Klausel:
Zuerst denke ich nicht, dass es eine gute Idee ist, Nummer als Alias zu haben. Verwenden Sie stattdessen ein Zeichen oder ein Wort.
Ich würde die Kriterien in den Join legen.
%Vor%Andere Kommentare:
Sie filtern nach der zweiten Tabelle in %code% . Die Werte könnten %code% sein und %code% schlägt die Vergleiche fehl.
Verschieben Sie die Bedingung %code% in die %code% -Klausel:
%Vor%Zuerst denke ich nicht, dass es eine gute Idee ist, Nummer als Alias zu haben. Verwenden Sie stattdessen ein Zeichen oder ein Wort.
Ich würde die Kriterien in den Join legen.
%Vor%Andere Kommentare:
Ich habe einen Join mit mehreren Tabellen (nur zwei im Beispiel), in dem ich alle Zeilen aus der Basistabelle behalten muss. Offensichtlich verwende ich einen LINKEN JOIN, um alle Zeilen in der Basistabelle einzubeziehen. Ohne die WHERE-Klausel funktioniert es großartig - Wenn eine Zeile in der rechten Tabelle nicht existiert, wird die Zeile aus der linken Tabelle immer noch angezeigt, nur mit einer 0 aus der Spalte in der rechten Tabelle. Die ersten beiden Zeilen im Dataset sind Labels aus der linken Tabelle und Anzahl der Zeilen aus der rechten Tabelle, gruppiert nach Label. Alles, was ich will, ist eine Zählung von 0, wenn einem Label kein Wert aus Tabelle2 zugewiesen ist.
Tabelle1
%Vor%Tabelle2
%Vor%Abfrage :
%Vor%Gutes Ergebnis - Keine Filter
%Vor%Großartig!
Mein Problem ist, dass, wenn ich Filterkriterien hinzufüge, um Zeilen aus der Right-Tabelle zu entfernen, die Zeile für meine Links-Join-Zeilen entfernt wird (sie werden auf Null gesetzt), werden die Linken Zeilen gelöscht. Ich brauche die Linken Zeilen, um auch dann zu bleiben, wenn ihre Anzahl auf Null gefiltert ist.
%Vor%Bummer Result Set - Nach Filtern
%Vor%Dukes!
Also, was zur Hölle? Muss ich eine temporäre Tabelle mit dem gefilterten Dataset erhalten THEN verbinden Sie es mit der linken Tabelle? Was vermisse ich? Danke!
Führen Sie einen zweiten oder rekursiven Join aus. Holen Sie sich meine "gute" Join-Tabelle, holen Sie sich eine zweite "gefilterte" Tabelle, dann LINKS verbinden Sie sie
verschieben Sie einfach die Bedingung in %code% -Klausel in die %code% -Klausel.
%Vor%Wenn Sie SQL Server verwenden, setzen Sie die Daten in einfache Anführungszeichen. Wenn nicht, wird der Ausdruck anstelle des Datums ausgewertet.
%Vor%