繁体   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