基于字段值选择行

问题描述 投票:1回答:2

我有这个结构

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'值。所以结果应该是这个

enter image description here

AAA仅具有'NO',因此我们将其返回,BBB具有多个,因此将返回除'NO'之外的所有内容

[我想在一个语句中选择它,而不删除它,等等。我尝试将ROW_NUMBER()划分为Field1,但不能解决问题

sql-server tsql sql-server-2017
2个回答
1
投票

不存在:

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

0
投票

希望这个例子对您有帮助。

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
© www.soinside.com 2019 - 2024. All rights reserved.