以下是我的源表:
条目 ID | 姓名 | 颜色 |
---|---|---|
1 | 约翰 | 红色 |
2 | 约翰 | 空 |
3 | 史蒂夫 | 空 |
4 | 史蒂夫 | 空 |
我想根据
选择整行预期结果应该是:
条目 ID | 姓名 | 颜色 |
---|---|---|
1 | 约翰 | 红色 |
3 | 史蒂夫 | 空 |
我是 SQL 新手,想知道有什么方法可以达到预期的结果?
非常感谢,非常感谢。 (原谅我的英语/语法不好)
答案 0 :(得分:0)
您可以使用 row_number()
。这几乎适用于任何数据库:
select t.*
from (select t.*,
row_number() over (partition by name order by colour desc, id) as seqnum
from t
) t
where seqnum = 1;
降序的 order by
将 NULL
值放在最后,因此首先选择非 NULL
行。
另一种方法是:
select t.*
from t
where t.colour is not null or
t.id = (select (case when count(colour) = 0 then min(t2.id) end)
from t
)