私はpostgresのクエリでデータをピボットしようとしています。私が現在使用しているクエリは、次のとおりです。postgresクロス集計クエリの動的列名
クエリの出力は、各製品のデータが13か月間であるようなものです。
+--------+------------+----------+
| Number | Month | Quantity |
+--------+------------+----------+
| 1 | 2016-10-01 | 7592 |
| 1 | 2016-11-01 | 6796 |
| 1 | 2016-12-01 | 6512 |
| 1 | 2017-01-01 | 6160 |
| 1 | 2017-02-01 | 6475 |
| 1 | 2017-03-01 | 6016 |
| 1 | 2017-04-01 | 6616 |
| 1 | 2017-05-01 | 6536 |
| 1 | 2017-06-01 | 6256 |
| 1 | 2017-07-01 | 6300 |
| 1 | 2017-08-01 | 5980 |
| 1 | 2017-09-01 | 5872 |
| 1 | 2017-10-01 | 5824 |
+--------+------------+----------+
私はそれは、各製品のすべてのデータが13ヶ月の行に示されている
+--------+-----------+-----------+-----------+----------+-----+
| Number | 2016-10-1 | 2016-11-1 | 2016-12-1 | 2017-1-1 | ... |
+--------+-----------+-----------+-----------+----------+-----+
| 1 | 100 | 100 | 200 | 250 | ... |
| ... | | | | | |
+--------+-----------+-----------+-----------+----------+-----+
のようなものが見えるようにデータをピボットしようとしています。
私は基本的なクロス集計クエリ
SELECT *
FROM
crosstab('SELECT product_number, month::TEXT, sum(quantity)
FROM forecasts
WHERE date_trunc(''month'', extract_date) = date_trunc(''month'', ''2016-10-1''::DATE)
GROUP BY product_number, month
ORDER BY product_number, month')
As mthreport(product_number text, m0 DATE, m1 DATE, m2 DATE,
m3 DATE, m4 DATE, m5 DATE, m6 DATE,
m7 DATE, m8 DATE, m9 DATE, m10 DATE,
m11 DATE, m12 DATE, m13 DATE)
を使用してみました。しかし、私はに名前を定義して置くことができれば、列名がクロス集計IEで設定された場合、私は次のようなエラー
ERROR: invalid return type Detail: SQL rowid datatype does not match return rowid datatype.
を取得クロスタブの出力は機能しますが、日付が変わり続けるため、それらを定義する方法がわかりません
ここでは非常に基本的なものがないと思います。どんな助けでも本当に感謝しています。
M1のint、int型平方メートル....そのため –