0
Table Schema

ID    Status     Patient
1     critical    Gabriel   
1     moderate   Frank
1     critical   Dorin 
2     low        Peter
3     critical    Noman 
3     moderate   Johnson

期待されるアウトプット


ID   Patient1   Patient2
1    Gabriel    Dorin
3    Noman      Null

ここでは、危機的な状況にある患者のみを表示する必要があります。

同様の質問Multiple column values in a single rowを見つけましたが、そのSQLでも列がハードコーディングされています。

ありがとう!

4

2 に答える 2

0

クエリを作成し、結果をカーソルに対して実行してみてください。

SET SERVEROUTPUT ON

DECLARE
v_fact NUMBER := 1;
v_max_cnt number:=1;
V_query CLOB:='';
BEGIN
select max(RNum) into v_max_cnt from(
  select row_number() over (partition by ID order by ID) RNum from PATIENTSTATUS where status='critical'
  )x;
FOR v_counter IN 1..v_max_cnt LOOP
  V_query := V_query||v_fact||' as Patient'||v_fact||(case when v_fact=v_max_cnt then '' else ',' end);
  v_fact:=v_fact+1;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE  ('select * from (
    select id, patient, row_number() over (partition by id order by patient) as rnk
    from PATIENTSTATUS
    where status=''critical'')
    pivot (max(patient) for rnk in ('||V_query||'))
    order by 1;');
END;

プロシージャから、次の方法でデータをカーソルに挿入できます。

OPEN CUR_Your_Cursor FOR V_query;
于 2013-04-30T12:30:36.017 に答える