이름과 값으로 정의되지 않은 행 수를 가진 두 개의 테이블 이 주어지면 값 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에서 가장 잘 할 수있는 것은 무엇입니까?