Одним из решений является использование предложения 10g MODEL :
SQL> select col1
2 , col2
3 , col3
4 , col4
5 , col5
6 from t23
7 model
8 return updated rows
9 partition by ( col1 )
10 dimension by ( row_number() over ( partition by col1
11 order by col2 desc nulls last) rnk
12 )
13 measures (col2, col3, lpad(' ',4) col4, lpad(' ',4) col5)
14 rules upsert
15 (
16 col2 [0] = col2 [1]
17 , col3 [0] = col3 [1]
18 , col4 [0] = col2 [2]
19 , col5 [0] = col3 [2]
20 )
21 /
COL1 COL2 COL3 COL4 COL5
---------- ---- ---- ---- ----
1 ABC Yes ABC NO
2 XYZ NO
SQL>
К сожалению, в таких решениях нам нужно указывать количество столбцов в запросе. То есть в обычном SQL нет механизма определения того, что таблица содержит три строки, где COL1 = 1, поэтому нам нужно семь столбцов, что не является необоснованным. Для ситуаций, в которых число значений сводки неизвестно во время кодирования, всегда есть динамический sql.