我是SQL的新手并在这里寻求帮助。请看第一个截图。除country
字段外,前两个记录具有精确值。第二个屏幕截图是我想要检索的。我想获得第一个(非空country
)。我还想保留第三条记录,因为它是id
345的唯一记录,尽管它有一个空country
。我尝试了以下查询,但没有得到我想要的结果。
SELECT DISTINCT id, first, last, age, gender, city, state, zip
FROM Person
WHERE country IS NOT NULL
答案 0 :(得分:1)
您可以使用row_number
分析功能执行此操作。
按id
分区然后按rn = 1
过滤,我们确保每个不同的id
值不会超过一行。
order by
函数中的row_number
子句决定返回哪个行。在这种情况下,具有非空country
值的行优先。如果您有更复杂的规则来确定要按id
返回哪一行,请相应地调整order by
子句。
select id, first, last, age, gender, city, state, zip, country
from (select id, first, last, age, gender, city, state, zip, country
row_number() over(
partition by id
order by case when country is not null then 1 else 2 end) as rn
from tbl)
where rn = 1
答案 1 :(得分:1)
像
这样的东西select id, first, last, age, gender, city, state, zip, min(country)
from persons
group by id, first, last, age, gender, city, state, zip
应该可以工作,因为默认情况下,varchar2值的顺序是升序,空值是最后的。