Biorąc pod uwagę dwie tabele z nieokreśloną liczbą wierszy z nazwą i wartością, w jaki sposób wyświetlać funkcję obrotową CROSS JOIN
funkcji nad ich wartościami.
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);
Na przykład, jeśli tą funkcją byłoby mnożenie, jak wygenerowałbym tabelę (mnożenie) taką jak ta poniżej,
Wszystkie te (arg1,arg2,result)
wiersze można wygenerować za pomocą
SELECT foo.name AS arg1, bar.name AS arg2, foo.x*bar.x AS result
FROM foo
CROSS JOIN bar;
Więc to jest tylko kwestia prezentacji, chciałbym, aby to również działało z niestandardową nazwą - nazwą, która nie jest po prostu argumentem CAST
edytowanym w tekście, ale ustawionym w tabeli,
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);
Myślę, że byłoby to łatwe do wykonania dzięki CROSSTAB zdolnemu do dynamicznego typu powrotu.
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**
Ale bez tego **MAGIC**
rozumiem
ERROR: a column definition list is required for functions returning "record" LINE 1: SELECT * FROM crosstab(
Dla porównania, używając powyższych przykładów z nazwami, jest to coś więcej niż to tablefunc
, czego crosstab()
chce.
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);
Ale teraz wróciliśmy do przyjmowania założeń dotyczących zawartości i wielkości bar
tabeli w naszym przykładzie. Więc jeśli,
- Tabele mają nieokreśloną długość,
- Następnie połączenie krzyżowe reprezentuje sześcian o nieokreślonym wymiarze (z powodu powyższego),
- Nazwy kategorii (język tabulatora) znajdują się w tabeli
Co możemy zrobić w PostgreSQL bez „listy definicji kolumn”, aby wygenerować tego rodzaju prezentację?