我有一个返回结果的查询,如
我想要做的是让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
原因是我需要每个人只有一个所有者,而不是两个
答案 0 :(得分:0)
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 Limit
答案 1 :(得分:0)
基于上面的评论现在,问题是我只需要一个人来取得每个结果的所有权,这样他们就可以处理分配的任务。哪个id的所有者
并不重要以下Query将满足该需求。
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
答案 2 :(得分:0)
假设“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;
答案 3 :(得分:0)
基于评论和问题
假设您有一个日期字段来检查真正的所有者,或者您可以根据它们在无法识别的事件中过滤记录,我要说如果您只想删除ID的重复项,请使用&# 34个不同的"关键字。
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将表连接到self)并过滤结果" First" .name<" Second" .name,&# 34;首先"和"第二"是同一个表输出的别名。 (这只适用于这种情况,如果你有基于字母顺序排序的任何排序标准)