[英]Complicated SQL query request
我有桌子
Number Letter KeyLetter
1 a 1
1 b 0
1 c 0
1 d 0
2 e 0
2 f 0
2 g 0
3 h 1
3 i 1
3 j 0
从它我想要这个:
Number Letter KeyLetter
1 a 1
2 e 0
2 f 0
2 g 0
3 h 1
3 i 1
对于每组数字,如果字母是一个KeyLetter,我想忽略所有非KeyLetter。 如果一组数字中没有字母是KeyLetter的条目,则显示该组数字中的所有条目。
什么SQL查询将能够做到这一点?
简单的答案,返回KeyLetter = 1的行,以及Number不具有KeyLetter = 1的行。
select *
from tablename t1
where t1.KeyLetter = 1
or not exists (select * from tablename t2
where t1.Number = t2.Number
and t2.KeyLetter = 1)
或者:
select t1.*
from tablename t1
join (select Number, max(KeyLetter) maxKeyLetter
from tablename
group by Number) t2
on t1.Number = t2.Number and t1.KeyLetter = t2.maxKeyLetter
要么...
select *
from tablename
where (Number, KeyLetter) in
(select Number, max(KeyLetter)
from tablename
group by Number)
前两个符合Core ANSI SQL。 后者使用扩展F641,“行和表的构造函数”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.