第一步是選擇危重病人,並命令他們:
select id, patient, row_number() over (partition by id order by patient) as rnk
from your_table
where status='critical';
此之後,你可以用這種方式選擇前兩個危重病人:
select id,
max(case when rnk=1 then patient end) as Patient1,
max(case when rnk=2 then patient end) as Patient2
from (
select id,
patient,
row_number() over (partition by id order by patient) as rnk
from your_table
where status='critical'
)
group by id;
如果你想有一個更靈活的解決方案你可以嘗試像下面這樣的查詢,但是你應該在運行前選擇排名數:
with your_table as
(select 1 as id, 'critical' as status, 'Gabriel' as patient from dual
union all
select 1, 'moderate', 'Frank' from dual union all
select 1, 'critical', 'Dorin' from dual union all
select 1, 'critical', 'Vasile' from dual union all
select 2, 'low', 'Peter' from dual union all
select 3, 'critical', 'Noman' from dual union all
select 3, 'moderate', 'Johnson' from dual)
select * from (
select id, patient, row_number() over (partition by id order by patient) as rnk
from your_table
where status='critical'
)
pivot (max(patient) for rnk in (1, 2, 3))
order by 1 ;
(這是針對三位患者的)
如果你有3名危重病人在同一個ID,會發生什麼被插入到光標? – 2013-04-30 11:06:23
@AmitSingh我認爲你沒有看到這個問題,並預期的結果.. :) – BreakHead 2013-04-30 11:08:13
你是對的,我現在得到它 – 2013-04-30 11:11:56