名前と値を持つ未定義の行数を持つ2つのテーブルがある場合、CROSS JOIN
それらの値に対して関数のピボットをどのように表示しますか。
CREATE TEMP TABLE foo AS
SELECT x::text AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT x::text AS name, x::int
FROM generate_series(1,5) AS t(x);
たとえば、その関数が乗算である場合、以下のような(乗算)テーブルをどのように生成しますか?
これらの(arg1,arg2,result)
行はすべて、次を使用して生成できます。
SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar;
したがって、これは表示の問題にすぎません。これは、カスタム名(CAST
テキストへの単なる引数ではなくテーブルに設定された名前)
CREATE TEMP TABLE foo AS
SELECT chr(x+64) AS name, x::int
FROM generate_series(1,10) AS t(x);
CREATE TEMP TABLE bar AS
SELECT chr(x+72) AS name, x::int
FROM generate_series(1,5) AS t(x);
これは、動的な戻り値型が可能なCROSSTABで簡単に実行できると思います。
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
', 'SELECT DISTINCT name FROM bar'
) AS **MAGIC**
しかし、なしで**MAGIC**
、私は得る
ERROR: a column definition list is required for functions returning "record" LINE 1: SELECT * FROM crosstab(
参考のために、名前で上記の例を使用して、これはより多くの何のようなものであるtablefunc
のcrosstab()
を望んでいます。
SELECT * FROM crosstab(
'
SELECT foo.x AS arg1, bar.x AS arg2, foo.x*bar.x
FROM foo
CROSS JOIN bar
'
) AS t(row int, i int, j int, k int, l int, m int);
しかし、今度はbar
、この例のテーブルの内容とサイズについての仮定に戻ります。だから、
- テーブルの長さは未定義ですが、
- 次に、クロス結合は未定義の次元のキューブを表します(上記のため)。
- カテゴリ名(クロスタブ用語)は表にあります
そのようなプレゼンテーションを生成するために、「列定義リスト」なしでPostgreSQLでできることは何ですか?