微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

选择具有特定条目 DB2 的 ID

如何解决选择具有特定条目 DB2 的 ID

我试图解决这个问题有一段时间了,但我绝对缺乏 DB2 的经验,这看起来应该是一件容易的事,但仍然想不出办法来做到这一点。

举个例子,我有一张桌子:

+------+------+
|ID    |LEVEL |
+------+------+
|1     |L     |
+------+------+
|1     |R     |
+------+------+
|2     |T     |
+------+------+
|1     |T     |
+------+------+
|2     |R     |
+------+------+

我正在尝试选择一个 ID 条目,但要求首先选​​择级别为 L 的条目(如果存在),然后选择 T,然后选择 R。它应该如下所示:

+------+------+
|ID    |LEVEL |
+------+------+
|1     |L     |
+------+------+
|2     |T     |
+------+------+

有没有简单的方法来实现这一目标?我尝试先连接结果,结果是这样的表:

+------+------+
|ID    |LEVEL |
+------+------+
|1     |L,R,T |
+------+------+
|2     |T,R   |
+------+------+

然后将 CASE 与 Like 一起使用,但这不起作用。提前致谢!

解决方法

一种方法使用 row_number()

select t.*
from (select t.*,row_number() over (partition by id
                                order by case level when 'L' then 1 when 'T' then 2 when 'R' then 3 else 4 end
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

但是,有时我喜欢这种情况下的条件聚合方法:

select id,coalesce(max(case when level = 'L' then level end),max(case when level = 'T' then level end),max(level)
               ) as level
from t
group by id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。