У меня есть таблица подобного типа:
+-----------+----------+------------------------+
| week_no | ticker | ratio |
|-----------+----------+------------------------|
| 39.0 | PBRT | 0.33333333333333333333 |
| 38.0 | ADM | 0.50000000000000000000 |
| 40.0 | TSCO | 1.00000000000000000000 |
| 39.0 | AAL | 0.09090909090909090909 |
+-----------+----------+------------------------+
Мне нужно трансформировать таблицу в подобный формат:
+-----------+------------------------+------------------------+------------------------+------------------------+
| week_no | adm | pbrt | aal | tsco |
|-----------+------------------------+------------------------+------------------------+------------------------|
| 38.0 | 0.50000000000000000000 | <null> | <null> | <null> |
| 39.0 | <null> | 0.33333333333333333333 | 0.09090909090909090909 | <null> |
| 40.0 | <null> | <null> | <null> | 1.00000000000000000000 |
+-----------+------------------------+------------------------+------------------------+------------------------+
Чтобы каждый тикер стал отдельным столбцом, а недели были строками.
Я использую такой скрипт:
SELECT *
FROM crosstab(
'select week_no, ticker, ratio
from rejected_ratio_per_ticker_and_week_for_crosstab
order by 1,2')
AS ct(week_no double precision, ADM numeric, PBRT numeric, AAL numeric, TSCO numeric);
Но на выходе я получаю это:
+-----------+------------------------+------------------------+--------+--------+
| week_no | adm | pbrt | aal | tsco |
|-----------+------------------------+------------------------+--------+--------|
| 38.0 | 0.50000000000000000000 | <null> | <null> | <null> |
| 39.0 | 0.09090909090909090909 | 0.33333333333333333333 | <null> | <null> |
| 40.0 | 1.00000000000000000000 | <null> | <null> | <null> |
+-----------+------------------------+------------------------+--------+--------+
Как мне поступить? Я первый раз использую crosstab и не совсем понимаю логику его ORDER BY.
Спасибо за помощь!