我有一个查询,它返回类似的结果
- 吉姆 456
- 乔567
- 乔789
- 简456
我想要做的是让 456 只出现一次并取名字(吉姆)。
查询看起来像
select
p.id_id as num_id, p.FIRST_NAME || ' ' || p.LAST_NAME as Name_
from DWH.V_TABLE p
where p.id_id > 100
这样做的原因是我需要每个人只有一个所有者,而不是两个
我有一个查询,它返回类似的结果
我想要做的是让 456 只出现一次并取名字(吉姆)。
查询看起来像
select
p.id_id as num_id, p.FIRST_NAME || ' ' || p.LAST_NAME as Name_
from DWH.V_TABLE p
where p.id_id > 100
这样做的原因是我需要每个人只有一个所有者,而不是两个
select p.id_id as num_id,
p.FIRST_NAME || ' ' || p.LAST_NAME as Name_
from DWH.V_TABLE p
where p.id_id>100
LIMIT 1
那是你需要的吗?它只会返回第一个结果。另请参阅SQL 限制
根据上面的评论现在的问题是我只需要一个人来拥有每个结果的所有权,这样他们就可以完成分配的任务。不管是哪个 id 的所有者
以下查询将满足该需求。
select p.id_id as num_id
,MIN(p.FIRST_NAME || ' ' || p.LAST_NAME) as Name_
from DWH.V_TABLE p
where p.id_id > 100
GROUP BY
p.id_id
假设“456”是存储在id_id
列中的值,那么应该这样做:
select num_id,
name_
from (
select p.id_id as num_id,
p.first_name || ' ' || p.last_name as name_
row_number() over (partition by p.id_id order by p.FIRST_NAME || ' ' || p.LAST_NAME) as rn
from dwh.v_table p
where p.id_id > 100
) t
where rn = 1;
根据评论和问题
假设您有一个日期字段来检查真正的所有者,或者您可以根据它们在另一个表中的出现来过滤记录,我会说如果您只想摆脱 ID 的重复项,使用“distinct”关键字。
select distinct p.id_id as num_id, p.FIRST_NAME || ' ' || p.LAST_NAME as Name_
from DWH.V_TABLE p
where p.id_id > 100
您还可以创建一个自连接表(使用 p.id_id 连接到自身的表)并过滤结果,其中“First”.name<“Second”.name、“First”和“Second”是同一个表输出的别名. (这仅适用于这种情况,如果您有任何基于字母优先级的排序标准)