Вам нужна операция реверс того, что делает crosstab()
. Некоторые называют это «разворотом» или «встречным разворотом». LATERAL
присоединение к выражению VALUES
должно быть самым элегантным способом:
SELECT l.*
FROM tbl -- or replace the table with your subquery
CROSS JOIN LATERAL (
VALUES
('registered' , registered)
, ('downloaded' , downloaded)
, ('subscribed' , subscribed)
, ('requested_invoice', requested_invoice)
, ('paid' , paid)
) l(type, value)
WHERE id = 1; -- or whatever
Вам может потребоваться привести некоторые или все столбцы, чтобы получить общий тип данных. Как:
...
VALUES
('registered' , registered::text)
, ('downloaded' , downloaded::text)
, ...
Связанный:
Для операции реверс - "сводная таблица" или "перекрестная табуляция":