Как сгруппировать данные агрегатные функ

Есть таблица tbl_Regist:

| ID | CODE   | VAL       |
+----+--------+-----------+
| 95 | numVz  | 06        |
| 95 | prevVz | 84605898  |
| 95 | ndatVz | 10.10.10  |
| 95 | numVz  | 06        |
| 95 | prevVz | 14666641  |
| 95 | ndatVz | 11.11.11  |
| 95 | numVz  | 06        |
| 95 | prevVz | 84605898  |
| 95 | ndatVz | 12.12.12  |  

Мне нужно получить данные в таком ввиде:

| ID | numVz | prevVz   | ndatVz   | 
+----|-------+----------+----------+
| 95 | 06    | 84605898 | 10.10.10 |   
| 95 | 06    | 14666641 | 11.11.11 |
| 95 | 06    | 84605898 | 12.12.12 |  

Мой запрос:

select 
      t.ID,
      max(case when t.code = 'numVz'  then t.val end) as numVz
     ,max(case when t.code = 'prevVz' then t.val end) as prevVz
     ,max(case when t.code = 'ndatVz' then t.val end) as ndatVz
from tbl_Regist t
where t.ID = 95
group by t.ID   

| ID | numVz | prevVz   | ndatVz   | 
+----|-------+----------+----------+
| 95 | 06    | 84605898 | 12.12.12 |  

Возвращает только одну строку


Ответы (1 шт):

Автор решения: Zhandos
select r.ID,
       max(case when r.code = 'numVz'  then r.val end) as numVz,
       max(case when r.code = 'prevVz' then r.val end) as prevVz,
       max(case when r.code = 'ndatVz' then r.val end) as ndatVz
from (select r.*,
             row_number() over (partition by id, code order by <ordering column>) as seqnum
      from tbl_Regist r
     ) r
where r.ID = 95
group by r.ID, seqnum;
→ Ссылка