SQL首次出现一个字符串

时间:2013-08-23 14:09:21

标签: sql duplicates

我有一个返回结果的查询,如

  • Jim 456
  • Joe 567
  • Joe 789
  • Jane 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

原因是我需要每个人只有一个所有者,而不是两个

4 个答案:

答案 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;首先"和"第二"是同一个表输出的别名。 (这只适用于这种情况,如果你有基于字母顺序排序的任何排序标准)