MS-ACCESS / SQL - Как применить предложение where в нескольких условиях - PullRequest
1 голос
/ 29 мая 2020
SELECT Stock.*
FROM Stock
WHERE (
(
(Stock.ComputerPartNumber) In (SELECT [ComputerPartNumber] FROM [Stock] As Tmp GROUP BY [ComputerPartNumber] HAVING Count(*)=2)
) 
AND 
(
(Stock.EquipmentName)="EquipmentA" Or (Stock.EquipmentName)="EquipmentB")
) 
OR (
(
(Stock.ComputerPartNumber) In (SELECT [ComputerPartNumber] FROM [Stock] As Tmp GROUP BY [ComputerPartNumber] HAVING Count(*)=1)
) 
AND (
(Stock.EquipmentName)="EquipmentA" Or (Stock.EquipmentName)="EquipmentB"
)
);

Я использую вышеуказанный SQL для достижения ниже 3 элементов: -

  1. Узнать все ComputerPartNumber, которые используются только EquipmentA и / или EquipmentB
  2. Отфильтруйте результат запроса, если ComputerPartNumber используется оборудованием, отличным от EquipmentA и EquipmentB.
  3. Если ComputerPartNumber используется как EquipmentA, так и Equipment C, также отфильтруйте результат.

Однако элемент 3 не может быть отфильтрован успешно. Что мне делать для достижения пункта 3? Прилагаются снимки таблиц и запросов. Заранее спасибо!

Таблица

Запрос

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

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

select s.*
from stock as s
where not exists (select 1
                  from stock as s2
                  where s2.ComputerPartNumber = s.ComputerPartNumber and
                        s2.EquipmentName not in ("EquipmentA", "EquipmentB")
                 );
0 голосов
/ 29 мая 2020

Что вам нужно сделать, так это проверить, равно ли общее количество раз, когда деталь используется во всех единицах Оборудования, общему количеству раз, когда деталь используется Оборудованием A или B:

SELECT S.StorageID, S.ComputerPartNumber, S.EquipmentName, S.Result
FROM Stock AS S
WHERE 
(SELECT COUNT(*) FROM Stock AS S1 WHERE S1.ComputerPartNumber=S.ComputerPartNumber)
=(SELECT COUNT(*) FROM Stock AS S2 WHERE S2.ComputerPartNumber=S.ComputerPartNumber AND S2.EquipmentName IN("EquipmentA","EquipmentB"))

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...