Множественный фильтр MS Access в одном поле, удовлетворяющий им всем - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в доступе. У меня есть таблица, похожая на следующую: введите здесь описание изображения Я пытаюсь создать запрос, который показывает поставщиков, которые способны как шлифование, так и фрезерование. Это результат. Я прыгаю, чтобы получить

A    Grinding
A    Milling
B    Grinding
B    Milling 

, а остальные игнорировать. Любая помощь?

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Вы можете использовать exists:

select t.*
from table1 t
where
    t.capatibilty in ('Grinding', 'Milling')
    and exists (
        select 1
        from table1 t1
        where 
            t1.supplier = t.supplier 
            and t1.capatibilty in ('Grinding', 'Milling')
            and t1.capability <> t.capability
    )

Если Шлифование и Фрезерование - единственные два возможных значения, это можно немного упростить:

select t.*
from table1 t
where
    exists (
        select 1
        from table1 t1
        where 
            t1.supplier = t.supplier 
            and t1.capability <> t.capability
    )
0 голосов
/ 30 мая 2020
• 1000 *

Если вы хотите включить возможности в отдельные строки, вам нужно еще раз связать таблицу с самой собой, например:

SELECT Table1.Supplier, Table1_2.Capability
FROM (Table1 INNER JOIN Table1 AS Table1_1 ON Table1.Supplier = Table1_1.Supplier) 
INNER JOIN Table1 AS Table1_2 ON Table1.Supplier = Table1_2.Supplier
WHERE Table1.Capability="Grinding" AND Table1_1.Capability="Milling"

И ваш результат будет:

A   Milling
A   Grinding
B   Milling
B   Grinding
0 голосов
/ 29 мая 2020

Если вы хотите, чтобы были возвращены все столбцы, вы можете использовать EXISTS:

select t.*
from tablename as t
where exists (
  select 1 from tablename
  where supplier = t.supplier and capability <> t.capability
)

или:

select * from tablename
where supplier in (
  select supplier from tablename
  group by supplier
  having count(*) = 2
)
...