我有这个结构
CREATE TABLE #Test
(
Field1 VARCHAR(10),
Field2 VARCHAR(10)
)
INSERT #Test VALUES('AAA','NO'),
('BBB','NO'),
('BBB','YES'),
('BBB','SURE'),
('CCC','NO'),
('DDD','NO'),
('DDD','YES'),
('DDD','ALWAYS')
SELECT * FROM #Test
每个不同的Field1
值都有Field2
'否'。我想从#Test
中选择所有行,以便如果不同的Field1
值具有多个Field2
值,则返回除Field2
='NO'的行以外的所有内容,否则返回'NO'值。所以结果应该是这个
AAA仅具有'NO',因此我们将其返回,BBB具有多个,因此将返回除'NO'之外的所有内容
[我想在一个语句中选择它,而不删除它,等等。我尝试将ROW_NUMBER()
划分为Field1
,但不能解决问题
不存在:
SELECT * FROM #Test t
WHERE t.Field2 <> 'NO'
OR NOT EXISTS (SELECT 1 FROM #Test WHERE Field1 = t.Field1 AND Field2 <> 'NO')
请参见demo。结果:
> Field1 | Field2
> :----- | :-----
> AAA | NO
> BBB | YES
> BBB | SURE
> CCC | NO
> DDD | YES
> DDD | ALWAYS
希望这个例子对您有帮助。
select Field1,Field2 from #Test where Field1 not in(SELECT Field1 FROM #Test where Field2<>'NO')
UNION ALL
SELECT Field1,Field2 FROM #Test where Field2<>'NO'
order by Field1