Работа с PostgreSQL
Создать таблицу
(a TEXT,b TEXT,c INT)
Загрузить данные
Создать представление
SELECT
cf."Сценарий",
cf."Вид ДДС",
cf."Статья ДДС",
cf."МВЗ",
cf."Номенклатура",
cf."Период",
cf.value,
l.line_sort
FROM cf_main cf
LEFT JOIN md.cf_lines l ON
cf."Вид ДДС" = l.line_name;
CTE
Посмотреть про временные табличные выражения - CTE
https://sky.pro/wiki/sql/sozdanie-vremennykh-tablits-v-sql-cherez-postgre-sql/
WITH virtual_table AS (
SELECT a AS col1, b AS col2, c AS col3 FROM table1
UNION ALL
SELECT d AS col1, e AS col2, f AS col3 FROM table2
UNION ALL
SELECT g AS col1, h AS col2, m AS col3 FROM table3
)
SELECT * FROM virtual_table;
-- Используем CTE для упорядочивания данных в запросе
WITH cte AS (
SELECT *
FROM source_table
WHERE condition )
SELECT cte.*
FROM cte
JOIN other_table
ON cte.id = other_table.id;
Объединение нескольких Запросов с вычислением
SELECT b."Сценарий",
b."Статья БДР",
b."Статья затрат",
b."МВЗ",
b."Номенклатура",
b."Период",
b.value
FROM bdr_main b
WHERE b."Сценарий" = 'Бюджет 2025-2029'::text
UNION ALL
SELECT f."Сценарий",
f."Статья БДР",
f."Статья затрат",
f."МВЗ",
f."Номенклатура",
f."Период",
f.value
FROM bdr_main f
WHERE f."Сценарий" = 'Факт'::text
UNION ALL
SELECT 'Отклонение'::text AS "Сценарий",
b."Статья БДР",
b."Статья затрат",
b."МВЗ",
b."Номенклатура",
b."Период",
b.value - f.value AS value
FROM (SELECT * FROM bdr_main WHERE "Сценарий" = 'Бюджет 2025-2029') b
JOIN (SELECT * FROM bdr_main WHERE "Сценарий" = 'Факт') f
ON b."Статья БДР" = f."Статья БДР"
AND b."Статья затрат" = f."Статья затрат"
AND b."МВЗ" = f."МВЗ"
AND b."Номенклатура" = f."Номенклатура"
AND b."Период" = f."Период";
Superset
SUM(CASE WHEN "Сценарий" = 'Факт' THEN COALESCE(value, 0) ELSE 0 END) /*добавление меры */