sql >> データベース >  >> RDS >> Oracle

同じ値のブロックに属する値を分離せずに、いくつかの一意の値を取得します

    これは完全な答えではありませんが、コメントに多くの質問を書きたくありません。
    あなたの主な目標は、人々に情報を送信し、1人の人が2回FAXを受信する状況を回避することです。したがって、最初に次のような一意の受信者のリストが必要です。

    select distinct otherid
      from NR_PVO_120
    

    1人が2つのFAX番号を持っている場合は、どちらを選択するかを決める必要があります。

    select otherid, fax
      from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
              from NR_PVO_120)
     where rn = 1
    

    (これはすべて、前の質問の回答にあります)
    このFAX番号のリストを取得すると、すべての受信者がFAXを受信し、すべての人に1つのFAXのみが送信されます。ただし、一部のファックス番号は使用されません。簡単に見つけることができます:

    select otherid, fax
      from (select otherid, fax, row_number() over (partition by otherid order by <choosing rule>) rn
              from NR_PVO_120)
     where rn > 1
    

    この番号のいずれかにFAXを送信すると、1つのFAXを2回受信する人もいます。
    英語は私の母国語ではないため、「FAX番号を分割せずに」とはどういう意味かわかりません。あなたの質問でわかるように、おそらくあなたはあなたの質問のファックス番号の順序を番号の優先順位として使用する必要があります(番号が大きいほどテーブルにあります-それを使用する可能性が高くなります)。次のように使用できるようです:

    select otherid, fax
      from (select otherid, fax, row_number() over (partition by otherid order by row) rn
              from NR_PVO_120)
     where rn = 1
    

    ここrow order by 句はRowです サンプルテーブルから。

    UPD
    P. S.最後のクエリについて:特定の順序のテーブルがあり、順序は重要です。テーブルの行を1行ずつ取得します。最初の行を取得し、そのotheridを配置します およびfax 結果テーブルに。次に、次の行を取ります。別のfaxが含まれている場合 番号とotheridotheridの場合は、それを受け取ります すでに結果テーブルにあるので、スキップします。このアルゴリズムを尋ねましたか?



    1. MySQLおよびMariaDBデータベースのクラウドバックアップオプション

    2. 条件付き一意制約

    3. PHPのmySQLテーブルからドロップダウンボックスにデータを入力します

    4. SQLite JSON_EXTRACT()