2016-05-17 10 views
0

Ich habe eine benutzerdefinierte Tabelle mit einem ID Feld (Autonummer) und einem item Feld. Ich habe eine andere Tabelle, die von meiner Firma mit vielen Feldern zur Verfügung gestellt wird, aber es hat auch ein item, whse, und qty_on_hand Feld.MS Access 2013: Warum gibt meine RIGHT JOIN-Abfrage keine NULL zurück, wenn keine Übereinstimmung vorhanden ist?

Ich möchte nur die Elemente finden, die in der benutzerdefinierten Tabelle aufgeführt sind, also verwende ich eine RECHTE VERBINDUNG. Aber, muss ich auch auf einige Kriterien filtern. Ich brauche das 'whse = A' und 'qty_on_hand> 0', aber wenn ich das tue, schließt es Elemente aus, bei denen es keine Übereinstimmung gibt, anstatt nur eine NULL zurückzugeben. Wie kann ich es so einrichten, dass alle Zeilen in der benutzerdefinierten Tabelle zurückgegeben werden und wenn keine Übereinstimmung vorliegt, geben Sie einfach NULL zurück?

ich in erster Linie die Entwurfsansicht in Access verwenden, aber das ist die SQL als in der Entwurfsansicht von meiner Arbeit erstellt:

SELECT 
    customtable.ID 
    ,customtable.item 
    ,Sum(companytable.qty_on_hand) AS SumOfqty_on_hand 
    ,companytable.whse 
FROM companytable 
    RIGHT JOIN customtable ON companytable.item = customtable.item 
GROUP BY 
    customtable.ID 
    ,customtable.item 
    ,companytable.whse 
HAVING 
    (((Sum(companytable.qty_on_hand))>0) 
    AND ((companytable.whse)="A")) 
ORDER BY 
    customtable.ID; 
+0

Kennen Sie die NULL-Werte sehen Sie erwarten, wenn Sie die 'HAVING' Klausel entfernen? – HansUp

+0

@HansUp Ja ich mache – whatwhatwhat

Antwort

1

du über zu einem LEFT JOIN wechseln könnte, so dass Sie eine gewisse Filterung anwenden können die companytable in Ihrer ON Klausel, die die Datensätze in Ihrem companytable verursachen würde, bevor sie verbunden fallen:

SELECT customtable.ID, 
    customtable.item, 
    Sum(companytable.qty_on_hand) AS SumOfqty_on_hand, 
    companytable.whse 
FROM customtable 
LEFT JOIN companytable ON 
    companytable.item = customtable.item AND 
    companyTable.qty_on_hand > 0 AND 
    companyTable.whse = "A" 
GROUP BY customtable.ID, 
    customtable.item, 
    companytable.whse 
ORDER BY customtable.ID; 

ich bin nicht sicher, wie Access, dass in ihr vertreten ist „Design“ -Ansicht, aber es sollte gut funktionieren.

Alternativ können Sie eine Unterabfrage verwenden, die die companytable bevor er filtert:

SELECT customtable.ID, 
    customtable.item, 
    Sum(comptable.qty_on_hand) AS SumOfqty_on_hand, 
    comptable.whse 
FROM (SELECT * FROM companytable WHERE qty_on_hand > 0 AND whse = "A") AS comptable 
RIGHT JOIN customtable ON comptable.item = customtable.item 
GROUP BY customtable.ID, 
    customtable.item, 
    comptable.whse 
ORDER BY customtable.ID; 
+0

Mit der ersten Option bekomme ich eine Fehlermeldung: 'JOIN Ausdruck nicht unterstützt." " – whatwhatwhat

+0

2. Option funktionierte perfekt. Ich bekomme alle Elemente in der benutzerdefinierten Tabelle und zeigen Leerzeichen für die' qty_on_hand "und das' whse'. Danke. – whatwhatwhat