Я пытаюсь создать отчет об обратном времени, используя запрос кросс-таблицы PostgreSQL 9.5, где рефералы размещены в числах 1, 2, 3, 4,> 4 (см. выход ниже). У меня есть запрос на работу, однако, если я выполнил запрос, а значения дня 2 отсутствовали, вся строка сдвигает одну ячейку слева. Таким образом, второй день имеет значение дня 3, день 3 имеет значение дня 4 и т. Д. Может ли кто-нибудь помочь мне в том, как я могу сохранить 2-й день в этом примере пустым или ноль, но не сдвинуть строку влево?Как выполнить запрос кросс-таблицы PostgreSQL там, где нет значений в столбце
Заранее спасибо.
SCRIPT:
DROP TABLE IF EXISTS dt_temp;
CREATE TABLE dt_temp(id SERIAL, day int , referrals bigint);
INSERT INTO dt_temp(day, referrals) VALUES(1, 60);
INSERT INTO dt_temp(day, referrals) VALUES(2, 15);
INSERT INTO dt_temp(day, referrals) VALUES (3, 13);
INSERT INTO dt_temp(day, referrals) VALUES (4, 10);
INSERT INTO dt_temp(day, referrals) VALUES (5, 1);
INSERT INTO dt_temp(day, referrals) VALUES (6, 2);
INSERT INTO dt_temp(day, referrals) VALUES (7, 1);
INSERT INTO dt_temp(day, referrals) VALUES (8, 1);
Select * from crosstab(
$$
Select 'INDICATOR1' "INDICATOR", days::text, sum(referrals)::text
from (
SELECT CASE
WHEN day > 4 THEN '>4'
ELSE day::text
END "days",
referrals
FROM dt_temp
) "t"
group by 1,2
order by 2
$$
) AS dx2ref(Indicator text, Day1 text, Day2 text, Day3 text, Day4 text, "Day > 4" text)
ВЫВОД:
indicator Day1 Day2 Day3 Day4 Day > 4
--------------------------------------
INDICATOR1 60 15 13 10 5
+ для сценария! – klin