给定两个具有未定义的行计数和名称和值的表,我将如何显示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中,我们能做的最好的事情是什么?