Предполагая, что вы не хотите продолжать запись данных в триместрах в будущем (т. Е. Это можно решить с помощью одноразовой операции), и что вы работаете с SQL Server, вы можете предварительно обрабатывать данные за триместр в квартал данные в той же таблице, чтобы облегчить сравнение. Что-то вроде следующего даст вам ваши значения Q1 и Q2:
-- Q1 rows
INSERT INTO data_table (year, period, d1, d2, value_cy)
SELECT year, period, d1, d2, t1_component.value_cy FROM
(
SELECT
year,
'Q1' AS period,
CONCAT(year, '-01-01') AS d1,
CONCAT(year, '-04-01') AS d2,
FROM
data_table
) main
CROSS APPLY
(
SELECT 0.75 * value_cy AS value_cy
FROM data_table
WHERE year = main.year
AND period = 'T1'
) t1_component;
-- Q2 rows
INSERT INTO data_table (year, period, d1, d2, value_cy)
SELECT year, period, d1, d2, t1_component.value_cy + t2_component.value_cy FROM
(
SELECT
year,
'Q2' AS period,
CONCAT(year, '-05-01') AS d1,
CONCAT(year, '-08-01') AS d2,
FROM
data_table
) main
CROSS APPLY
(
SELECT 0.25 * value_cy AS value_cy
FROM data_table
WHERE year = main.year
AND period = 'T1'
) t1_component
CROSS APPLY
(
SELECT 0.5 * value_cy AS value_cy
FROM data_table
WHERE year = main.year
AND period = 'T2'
) t2_component;
Вы можете получить значения Q3 и Q4, настроив вышеуказанные запросы по мере необходимости. После того, как вы получите все значения в квартальном формате, вы можете выполнить самостоятельное СОЕДИНЕНИЕ, чтобы получить результаты предыдущего года наряду с результатами текущего года, хотя это будет медленно из-за необходимости ПРИСОЕДИНЯТЬСЯ к рассчитанному значению (хотя это может удовлетворить ваши потребности) :
SELECT
cy.year,
cy.period,
cy.d1,
cy.d2,
cy.value_cy,
py.value_cy AS value_py
FROM data_table cy
INNER JOIN data_table py
ON py.year-1 = cy.year
WHERE cy.period IN ('Q1', 'Q2', 'Q3', 'Q4')
Кроме того, вы можете взглянуть на оператор PIVOT , который в основном преобразует значение строки в заголовке столбца:
SELECT period, [2019], [2018]
FROM
(SELECT period, year, value_cy FROM data_table WHERE period IN ('Q1', 'Q2', 'Q3', 'Q4')) AS src
PIVOT
(value_cy FOR year IN ([2019], [2018])
AS pivotTable