选择具有特定条目 DB2 的 ID
Selecting ID with a certain entry DB2
我想弄清楚这个问题有一段时间了,我肯定缺乏 DB2 的经验,看起来应该是一件容易的事,但仍然想不出办法。
例如我有一个 table:
+------+------+
|ID |LEVEL |
+------+------+
|1 |L |
+------+------+
|1 |R |
+------+------+
|2 |T |
+------+------+
|1 |T |
+------+------+
|2 |R |
+------+------+
我正在尝试 select 一个 ID 条目,但要求级别为 L 的条目如果存在则应首先 selected,然后是 T,然后是 R。它应该看起来像这个:
+------+------+
|ID |LEVEL |
+------+------+
|1 |L |
+------+------+
|2 |T |
+------+------+
有没有简单的方法可以做到这一点?我首先尝试连接结果,结果是 table 这样的:
+------+------+
|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;
我想弄清楚这个问题有一段时间了,我肯定缺乏 DB2 的经验,看起来应该是一件容易的事,但仍然想不出办法。
例如我有一个 table:
+------+------+
|ID |LEVEL |
+------+------+
|1 |L |
+------+------+
|1 |R |
+------+------+
|2 |T |
+------+------+
|1 |T |
+------+------+
|2 |R |
+------+------+
我正在尝试 select 一个 ID 条目,但要求级别为 L 的条目如果存在则应首先 selected,然后是 T,然后是 R。它应该看起来像这个:
+------+------+
|ID |LEVEL |
+------+------+
|1 |L |
+------+------+
|2 |T |
+------+------+
有没有简单的方法可以做到这一点?我首先尝试连接结果,结果是 table 这样的:
+------+------+
|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;