#sql #postgresql #pivot #crosstab
Вопрос:
Вот как выглядят мои данные —
id type entity diag count
9 SER ORG a 18
9 SER ORG b 5
9 SER PRAC b 50
Когда я выполняю этот запрос —
select *
FROM CROSSTAB($
SELECT
id, type, entity,
diag,
count
FROM calc
$, $
SELECT
name
FROM diagnosis
ORDER by name
LIMIT 3
$) AS pivot (
id INT,
type TEXT,
entity INT,
a INT, b INT, c int
);
Результат таков —
id type entity a b
9 SER ORG 18 5
Что случилось с последней записью во входных данных?
Я бы ожидал такого результата —
id type entity a b
9 SER ORG 18 5
9 SER PRAC 50
Ответ №1:
Попробуйте выполнить свою Crosstab
функцию таким образом:
select
col[1] "id",
col[2] "Type",
col[3] "Entity",
a,
b,
c
FROM CROSSTAB($
SELECT
ARRAY[id::varchar, type, entity],
diag,
count
FROM calc order by 1
$, $
SELECT
name
FROM diagnosis
ORDER by name
LIMIT 3
$) AS pivot (
col text[],
a INT, b INT, c int
);