SQL返回满足多个条件的数据集

时间:2019-05-03 12:36:49

标签: sql ms-access

我有以下MS-Access表:

╔═══════════╦══════════════╗
║ colPartNo ║ colOperation ║
╠═══════════╬══════════════╣
║ 1         ║ A            ║
╠═══════════╬══════════════╣
║ 1         ║ B            ║
╠═══════════╬══════════════╣
║ 1         ║ C            ║
╠═══════════╬══════════════╣
║ 2         ║ B            ║
╠═══════════╬══════════════╣
║ 2         ║ C            ║
╠═══════════╬══════════════╣
║ 3         ║ C            ║
╠═══════════╬══════════════╣
║ 3         ║ D            ║
╠═══════════╬══════════════╣
║ 3         ║ E            ║
╠═══════════╬══════════════╣
║ 4         ║ A            ║
╠═══════════╬══════════════╣
║ 4         ║ B            ║
╠═══════════╬══════════════╣
║ 4         ║ C            ║
╠═══════════╬══════════════╣
║ 4         ║ D            ║
╠═══════════╬══════════════╣
║ 5         ║ A            ║
╠═══════════╬══════════════╣
║ 5         ║ B            ║
╠═══════════╬══════════════╣
║ 5         ║ C            ║
╠═══════════╬══════════════╣
║ 6         ║ B            ║
╠═══════════╬══════════════╣
║ 6         ║ C            ║
╚═══════════╩══════════════╝

我要做的事情似乎无法解决,是返回一个仅包含不同零件号的数据集,其中零件号具有操作A,B和C。零件号可能还有其他操作,但必须同时具备这三个功能。我可以使用下面的语句获得零件编号的明确列表,但其中包括没有全部三个操作的零件:

SELECT DISTINCT tblPart_Info.Part_No, tblPart_Info.Operation
FROM tblPart_Info
WHERE (((tblPart_Info.Operation)="A" Or (tblPart_Info.Operation)="B" Or (tblPart_Info.Operation)="C"))
ORDER BY tblPart_Info.Part_No;

我想要获取的数据集将是零件编号1、4和5

1 个答案:

答案 0 :(得分:3)

您可以在having子句中使用条件聚合来做到这一点:

SELECT pi.Part_No, tblPart_Info.Operation
FROM tblPart_Info as pi
GROUP BY pi.Part_No
HAVING SUM(IIF(pi.Operation = "A", 1, 0)) > 0 AND
       SUM(IIF(pi.Operation = "B", 1, 0)) > 0 AND
       SUM(IIF(pi.Operation = "C", 1, 0)) > 0;

这将返回部件号。如果要原始行,请使用JOININEXISTS将其连接到原始表。