您可以逆轉置使用json functionsrow_to_json()
和json_each_text()
表。另外,使用with ordinality
來獲得列號。例如:
create table a_table (fcst_month int, val1 int, val2 int, val3 int);
insert into a_table values
(1, 10, 20, 30),
(2, 40, 50, 60);
select fcst_month, ordinality, key, value
from a_table, json_each_text(row_to_json(a_table)) with ordinality;
fcst_month | ordinality | key | value
------------+------------+------------+-------
1 | 1 | fcst_month | 1
1 | 2 | val1 | 10
1 | 3 | val2 | 20
1 | 4 | val3 | 30
2 | 1 | fcst_month | 2
2 | 2 | val1 | 40
2 | 3 | val2 | 50
2 | 4 | val3 | 60
(8 rows)
現在可以很容易地聚合值由它的位置選擇列:
select fcst_month, sum(value::int)
from a_table, json_each_text(row_to_json(a_table)) with ordinality
where ordinality > 1
group by 1
order by 1;
fcst_month | sum
------------+-----
1 | 60
2 | 150
(2 rows)
個人而言,我會使用val1+ val2+ val3...
即使是39列,除非我不得不處理一些動態,如未知數量的列。
你真的有很多專欄嗎?那裏有多少? –
有39個值列,但列名不是靜態的 –
如果我正確地理解了它,爲什麼你不能只用「fcst_month」從表組中選擇fcst_month,sum(val1 + val2 + ... + valN)?如果您向我們提供一些數據示例(輸入和輸出),會很好。 – Christian