Postgresql
如何在交叉表中動態設置列名?
我有一個包含鍵和值的表,我保存瞭如下所示的值
當我使用以下查詢時
select * from crosstab ( 'select rowname,colname,max(cellval) from table_to_pivot group by 1,2 order by 1,2', 'select distinct colname from table_to_pivot order by 1' ) as newtable (rowname varchar,_col1 integer,_col2 integer,_col3 integer);
我得到了我想要的輸出,如下所示
但我不想定義列名
$$ _col1 integer,_col2 integer,_col3 integer $$在我的查詢中,我希望它是動態的。有沒有辦法做到這一點?
SQL 引擎必須在執行查詢之前確定查詢的所有輸出列的名稱和類型。
如果事先不知道輸出列,因此無法將其硬編碼到查詢中,則必須通過兩個單獨的步驟來解決問題:
- 使用另一個查詢生成交叉表查詢
- 執行交叉表查詢
或者必須更改問題以接受嵌入在 JSON 列中的結果
json_object_agg
(如Static and dynamic pivots中所示)。在 stackoverflow 上有多個關於這個問題的答案,探索各種解決方法。CASE 和 GROUP BY 的動態替代方案提供了相當多的讀取和指向其他 Q/A 的指針。