Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂的SQL查询请求_Sql - Fatal编程技术网

复杂的SQL查询请求

复杂的SQL查询请求,sql,Sql,我有一张桌子 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

我有一张桌子

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
对于每一组数字,如果一个字母是关键字母,我想忽略任何非关键字母。 如果一组数字没有一个条目,其中字母是键字母,则显示该组数字中的所有条目


什么样的SQL查询能够做到这一点?

简单回答,返回KeyLetter=1的行,以及那些数字没有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
或者


前两个是符合核心ANSI SQL的。后者使用扩展名F641、行和表构造函数。

请标记您的dbms sql server、oracle、mysql等。
select *
from tablename
where (Number, KeyLetter) in 
    (select Number, max(KeyLetter)
     from tablename
     group by Number)