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

重複する値なしで5つのテーブルのデータを結合し、Oracle10gでカスタムステータスの結果を取得する

    ロジックに基づいてさまざまなステータスを「ランク付け」し、それらから最新のステータスを選択できます。以下のようなロジックを使用して、すべての「拒否」をプッシュダウンできます。

    残りのステータスの順序を気にする場合は、他のすべての可能なステータスを含めるようにしてください。

    with t1 as
    ( select 1 id, 'Waiver Requested'        status from dual union all
      select 1 id, 'Rejected'        status from dual union all
      select 2 id, 'Waiver Requested'        status from dual union all
      select 2 id, 'Waiver Requested'        status from dual union all
      select 3 id, 'Rejected'                status from dual union all
      select 3 id, 'Rejected'                status from dual union all
      select 4 id, 'Waiver Requested'        status from dual union all
      select 4 id, 'Cancelled'               status from dual
    )
    select id,
           status,
           max(status) KEEP (DENSE_RANK FIRST
                             order by (case when status ='Rejected' then -1
                                                else 1
                                           end) desc)
              over (partition by id) final_status
      from t1
    
            ID STATUS           FINAL_STATUS
    ---------- ---------------- ----------------
             1 Waiver Requested Waiver Requested
             1 Rejected         Waiver Requested
             2 Waiver Requested Waiver Requested
             2 Waiver Requested Waiver Requested
             3 Rejected         Rejected
             3 Rejected         Rejected
             4 Waiver Requested Waiver Requested
             4 Cancelled        Waiver Requested
    



    1. この日付形式のオラクルではないレコードを除外します

    2. SQLiteでiif()がどのように機能するか

    3. APEXインタラクティブレポートSQLのwhere句に文字列を追加する方法

    4. MSSQL2019のUDF内での予期しない@@rowcountの動作