This is my query:
SELECT * FROM profile_change_set where id = '1558079b-d954-4a0d-b241-b39fe8f3498c';
| id | table_name | column_key | column_value | operation_type |
|---|---|---|---|---|
| 1558079b-d954-4a0d-b241-b39fe8f3498c | farmers | smsEnabled | somvalue | update |
What is want is to convert all values into rows.
| column_key | column_value |
|---|---|
| id | 1558079b-d954-4a0d-b241-b39fe8f3498c |
| table_name | farmers |
| column_key | smsEnabled |
| column_value | somvalue |
| operation_type | update |
Any help, thank you in advance.
CodePudding user response:
You can use JSON features to turn columns into rows:
select cols.*
from profile_change_set pcs
cross join jsonb_each_text(to_jsonb(pcs)) as cols(column_key, column_value)
where pcs.id = ...;
CodePudding user response:
Try use table function CROSSTAB (analogue PIVOT function in SQL Server)
And take a look at this answer, in that answer, an intermediate table is used as a variable, and after that on this variable use CROSSTAB. Take a look at this way
