Select 根据多个SQL值选择行
我需要帮助以SQL编写此代码: 我有一个表,我想用字符A、B或C选择“否”,但如果我用A和B表示相同的“否”,我只想显示B,否则我需要显示全部 伪代码: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
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'))