在列必须匹配所有值的地方如何执行SELECT?

时间:2019-03-26 09:11:35

标签: sql sql-server-2008-r2

考虑一个包含3列的表格:

CREATE TABLE myTable (
ItemName nvarchar(100),
ItemRank int,
ItemLoc nvarchar(100))

表的示例输出(查询以插入到下面)

SELECT * FROM myTable
  
      
  1. Item1,1,LocA
  2.   
  3. Item1、2,LocB
  4.   
  5. Item1、3,LocC
  6.   
  7. Item2,1,LocA
  8.   
  9. Item2,2,LocC
  10.   
  11. Item3,1,LocB
  12.   
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数据的期望输出是

  
      
  1. Item2
  2.   
  3. Item3
  4.   

因为Item2未设置LocB,并且Item3未设置LocALocC

我该怎么做?我尝试使用NOT EXISTS查询并列出条件,但无济于事。

1 个答案:

答案 0 :(得分:2)

使用聚合

select ItemName
from myTable
where ItemLoc in ('LocA','LocB','LocC')
group by ItemName
having count(distinct itemloc)<3