0

次のような結果を返すクエリがあります

  • ジム 456
  • ジョー567
  • ジョー789
  • ジェーン 456

私がやりたいことは、456 が 1 回だけ表示され、最初の名前 (Jim) を取ることです。

クエリは次のようになります

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

この理由は、所有者を 2 人ではなく 1 人にする必要があるためです。

4

4 に答える 4

0

上記のコメントに基づいて、割り当てられたタスクに取り組むことができるように、各結果の所有権を取得する必要があるのは 1 人だけです。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
于 2013-08-23T14:48:54.873 に答える
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;
于 2013-08-23T16:34:28.367 に答える
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制限も参照してください

于 2013-08-23T14:11:07.120 に答える
0

コメントと質問に基づいて
、実際の所有者を確認するための日付フィールドがあると仮定するか、別のテーブルでの出現に基づいてレコードをフィルター処理できると仮定すると、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" が同じテーブル出力のエイリアスである場合に結果をフィルター処理することもできます。 . (これは、アルファベット順の優先順位に基づく並べ替え基準がある場合にのみ当てはまります)

于 2013-08-23T17:40:11.450 に答える