"column c"
и "column b"
- это так называемые «лишние» столбцы.Поместите их после имени строки и перед категорией:
SELECT * FROM crosstab(
'SELECT "column a", "column c", "column b"
,"value 2", "value 1"
FROM tbl
ORDER BY 1'
, 'VALUES (0), (1), (2), (3), (4)'
) AS ct (
"column a" text
, "column c" text
, "column b" text
, "0" int
, "1" int
, "2" int
, "3" int
, "4" int);
Для адресации вашего комментария:
Это вложенные числовые литералы, которые не нужно заключать в кавычки:
, 'VALUES (0), (1), (2), (3), (4)'
Строка литералы требуют кавычек (сейчас я использую кавычки для внешней цитаты):
, $$VALUES ('V0'), ('V1'), ('V2'), ('V3'), ('V4')$$
Или:
, $$SELECT unnest('{V0,V1,V2,V3,V4}'::text[])$$
db <> fiddle здесь
См .:
О crosstab()
:
... с дополнительными столбцами:
И рассмотрите вменяемые имена столбцов.(Предполагая, что данные имена являются просто символическими.)