2016-11-18 5 views
0

Ich verwende Access 2013 VBA SQL zum Filtern der Access-Tabelle. Müssen Artikel auswählen, die nur Lager 20 und 21 haben.Filtern von Datensätzen mit bestimmten Werten

Item Warehouse 

Item1 25 
Item1 21 
Item1 22 
Item1 22 

Item2 20 
Item2 21 
Item2 21 
Item2 21 
Item2 21 

Item3 20 
Item3 22 
Item3 23 
Item3 25 
Item3 25 
Item3 25 

Item4 20 
Item4 20 
Item4 20 
Item4 21 
Item4 21 

Item5 20 
Item5 20 
Item5 20 
Item5 20 
Item5 20 

Ergebnis ist Item2 und Item4 im obigen Beispiel. Vielen Dank.

+0

Sie können wirklich nicht mit dieser direkten Frage mit 'WHERE'-Klausel kommen? – Parfait

Antwort

3

Wenn Sie 20 und 21 wollen sowie andere:

select item 
from t 
where warehouse in (20, 21) 
group by item 
having min(warehouse) = 20 and max(warehouse) = 21; 

Wenn Sie 20 wollen und 21 aber keine andere:

select item 
from t 
group by item 
having min(warehouse) = 20 and max(warehouse) = 21; 

Wenn Sie 20 wollen oder 21 aber keine anderen:

select item 
from t 
group by item 
having sum(iif(warehouse = 20, 1, 0)) > 0 and 
     sum(iif(warehouse = 21, 1, 0)) > 0 and 
     sum(iif(warehouse in (20, 21), 0, 1) = 0; 
0

Sie können eine einfache innere trete auf den Tisch selbst Artikel, wobei als das durch Artikel der ersten Tabelle 20 verbinden und das Filtern und die zweite Tabelle von Punkt 21

DISTINCT wird die Duplikate entfernen

SELECT DISTINCT WH20Items.Item FROM Table1 AS WH20Items INNER JOIN Table1 AS WH21Items ON WH20Items.Item = WH21Items.Item WHERE (((WH20Items.Warehouse)=20) AND ((WH21Items.Warehouse)=21));

Verwandte Themen