簡體   English   中英

復雜的SQL查詢請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM