[英]Postgres pivot table with crosstab
我有一張像下一張一樣的桌子:
+------------+---------+---------+---------+
| date | value 1 | value 2 | value 3 |
+------------+---------+---------+---------+
| 01/01/2017 | 263 | 7 | 222 |
| 02/01/2017 | 275 | -9 | 209 |
| 03/01/2017 | 331 | -9 | 243 |
| . | . | . | . |
| . | . | . | . |
| . | . | . | . |
+------------+---------+---------+---------+
我想在 postgres 中創建另一個:
+---------+---------------+------------+------------+
| | 01/01/2017 | 02/01/2017 | 03/01/2017 |
+---------+---------------+------------+------------+
| value 1 | 263 | 275 | 331 |
| value 2 | 7 | -9 | -9 |
| value 3 | 222 | 209 | 243 |
+---------+---------------+------------+------------+
但我的問題是我不知道我會有多少個日期,所以我必須使用這樣的東西:
SELECT * FROM crosstab(
$$ SELECT value1, date FROM myTable ORDER BY 1 $$,
$$ SELECT m FROM generate_series((select min(date) from myTable) ,(select max(date) from myTable), '1 month'::interval) m $$
) AS (
".." date, ".." date, ".." date, ".." date
);
有人可以幫助我嗎? 謝謝。
您的基本問題是 PostgreSQL 需要知道列是什么樣子才能計划查詢。 因此,您需要返回某種固定列結構。 您可以通過多種方式執行此操作:
但是無論哪種方式,如果不在某處動態生成查詢,就無法在查詢中執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.