ПЕРЕКРЕСТНАЯ ТАБЛИЦА с ШАРНИРОМ

#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
);
 

ДЕМОНСТРАЦИЯ