簡體   English   中英

Select 滿足某個條件時只有一行?

[英]Select only one row when a certain condition is met?

ID 姓名 日期 地位
1 01-22 得到正式認可的
1 01-22 待辦的
2 賬單 02-22 得到正式認可的
2 賬單 02-22 送回
3 約翰 01-22 得到正式認可的
4 鮑勃 02-22 待辦的

如何每個 ID 只返回一行,優先考慮已批准?

示例:對於 ID 1,我只想要已批准的行,而不是待處理的行。

一些 ID 可能只有 1 條記錄,例如 ID 4 只有一條記錄並且處於待處理狀態。

我想要的是:如果狀態 = 相同 ID 的已批准和待處理,則保留已批准的記錄,而不是 select 待處理記錄

如果 status = pending 則保留該記錄

這將優先 select Approved,然后是 Pending,然后是其他所有內容。 如果您不想要“其他所有內容”,只需在 WHERE 子句中進行過濾。

select id,
       name,
       date,
       status
  from (
        select *,
               row_number() over 
                 ( partition by id
                       order by case when status = 'Approved' then 1
                                     when status = 'Pending' then 2
                                     else 3
                                 end asc,
                                date
                 ) as first_by_date_with_approved_precedence
          from your_table
       ) tmp
 where first_by_date_with_approved_precedence = 1

它也可以像下面這樣簡單(前提是狀態不是空白或空)

Select Top 1 with ties * 
 from  YourTable
 order by row_number() over (partition by id order by Status)

結果

ID  NAME    DATE    STATUS
1   Joe     01-22   Approved
2   Bill    02-22   Approved
3   John    01-22   Approved
4   Bob     02-22   Pending

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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