sql - 选择带有某个条目的 ID DB2
问题描述
我试图解决这个问题一段时间,而且我肯定缺乏使用 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;
推荐阅读
- python-3.x - 如何在python中将变量和方法作为命令行参数传递
- python - Kivy:为可重用小部件的按钮添加标签和图像
- linux - 使用不同的扩展文件随机添加数据
- php - php 未正确将 ascii 转换为 utf-8
- swiftui - SwiftUI 位置和帧动画在 iOS 14 中损坏
- flutter - Flutter removeWhere(...) 挂起列表
- r - 如何处理 R 中 lm(x~y) 函数中的负值?
- kubernetes - 更新运行 pod 的 pod 配置
- php - 在php中使用sql查询中的变量
- python - sklearn.compose.make_column_transformer():在一个数据帧列上一步使用 SimpleImputer() 和 OneHotEncoder()