考虑一个包含3列的表格:
CREATE TABLE myTable (
ItemName nvarchar(100),
ItemRank int,
ItemLoc nvarchar(100))
表的示例输出(查询以插入到下面)
SELECT * FROM myTable
- Item1,1,LocA
- Item1、2,LocB
- Item1、3,LocC
- Item2,1,LocA
- Item2,2,LocC
- Item3,1,LocB
INSERT INTO [dbo].[myTable]
([ItemName]
,[ItemRank]
,[ItemLoc])
VALUES
('Item1',1,'LocA'),
('Item1',2,'LocB'),
('Item1',3,'LocC'),
('Item2',1,'LocA'),
('Item2',2,'LocC'),
('Item3',1,'LocB')
现在,我知道只有3个可能的ItemLoc
值(LocA,LocB,LocC)。
我需要从ItemName
中选择所有myTable
,其中该项目未分配所有ItemLoc
(即LocA,LocB,LocC)。
使用boce数据的期望输出是
- Item2
- Item3
因为Item2
未设置LocB
,并且Item3
未设置LocA
或LocC
。
我该怎么做?我尝试使用NOT EXISTS
查询并列出条件,但无济于事。
答案 0 :(得分:2)
使用聚合
select ItemName
from myTable
where ItemLoc in ('LocA','LocB','LocC')
group by ItemName
having count(distinct itemloc)<3