过滤具有特定值的记录

时间:2016-11-18 23:36:24

标签: sql ms-access

我正在使用Access 2013 VBA SQL来过滤Access表。需要选择仅有仓库20和21的物品。

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

结果是上例中的Item2和Item4。谢谢。

2 个答案:

答案 0 :(得分:3)

如果你想要20和21 以及其他人:

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

如果你想要20和21 但没有其他人

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

如果你想要20或21 但没有其他人

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;

答案 1 :(得分:0)

您可以使用Item作为连接对表进行简单的内连接,并按项目20过滤第一个表,按项目21过滤第二个表

使用DISTINCT将删除重复项

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));