Вы можете развернуть с помощью бокового соединения:
select x.*
from damage d
cross join lateral (values
(d.rowId, d.damageTypeACount, 'Damage Type A'),
(d.rowId, d.damageTypeBCount, 'Damage Type B'),
(d.rowId, d.damageTypeCCount, 'Damage Type C')
) as x(id, damagecount, label)
Это влияет на исходный id
на каждую сгенерированную строку. Вы также можете сгенерировать новые идентификаторы с помощью row_number()
:
select row_number() over(order by id, label) id, x.*
from damage d
cross join lateral (values
(d.rowId, d.damageTypeACount, 'Damage Type A'),
(d.rowId, d.damageTypeBCount, 'Damage Type B'),
(d.rowId, d.damageTypeCCount, 'Damage Type C')
) as x(rowId, damagecount, label)
. При необходимости вы можете отфильтровать набор результатов с помощью предложения where
:
where d.rowId = 1