Select 根据多个SQL值选择行

Select 根据多个SQL值选择行,select,where,postgresql-9.1,Select,Where,Postgresql 9.1,我需要帮助以SQL编写此代码: 我有一个表,我想用字符A、B或C选择“否”,但如果我用A和B表示相同的“否”,我只想显示B,否则我需要显示全部 伪代码: SELECT * FROM Table1 WHERE IF EXISTS (Char = A and Char = B) THEN Char IN (B, C) ELSE Char IN (A, B, C) 例如: 表1 ID No Char 1 10 A 2 10 B 4 10

我需要帮助以SQL编写此代码:

我有一个表,我想用字符A、B或C选择“否”,但如果我用A和B表示相同的“否”,我只想显示B,否则我需要显示全部

伪代码:

SELECT *
  FROM Table1
  WHERE IF EXISTS (Char = A and Char = B)
    THEN Char IN (B, C)
    ELSE Char IN (A, B, C)
例如:

表1

ID  No     Char
1   10     A
2   10     B
4   10     C
5   11     A
6   11     D
7   12     C
我想要结果:

ID  No     Char
2   10     B
4   10     C
5   11     A
7   12     C
我需要什么清楚吗

select t1.Id, t1.No, t1.Ch from Table1 t1
where t1.Ch IN ( 'B', 'C')
UNION
select t1.Id, t1.No, t1.Ch from Table1 t1
where t1.Ch ='A' 
and not exists (select null from Table1 t2 where t2.No = t1.No  and t2.Ch='B')
我在Ch中更改了Char,因为Char可能是保留关键字

使用Sql Server进行了测试,但我认为查询是ANSI Sql


两者都适用于PostgreSQL,第二个更好。(为什么不在SQLFIDLE上使用PostgreSQL进行测试?)
select t1.Id, t1.No, t1.Ch from Table1 t1
where t1.Ch IN ( 'B', 'C')
OR (t1.Ch ='A'
and not exists (select null from Table1 t2 where t2.No = t1.No  and t2.Ch='B'))