С новыми оконными функциями ( PostgreSQL 8.4 или более поздними) вы можете даже сделать это без подзапроса:
SELECT cod_1, cod_2, date
, first_value(sum(import)) OVER w AS sum_import_a
, nth_value(sum(import), 2) OVER w AS sum_import_b
, first_value(sum(import)) OVER w
+ nth_value(sum(import), 2) OVER w
- last_value(sum(import)) OVER w AS calc_import_abc
FROM tbl
GROUP BY 1, 2, 3, cod_sum
WINDOW w AS (ORDER BY cod_sum
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
LIMIT 1;
Однако для простоты (идля PostgreSQL 8.3 ) Я бы сделал это, как демонстрирует @Adrian, просто без логической ошибки:
SELECT cod_1, cod_2, date, sum_import_a, sum_import_b
, sum_import_a
+ sum_import_b
- sum_import_c AS calc_import_abc
FROM (
SELECT cod_1, cod_2, date
, sum(CASE WHEN cod_sum = 'a' THEN import ELSE 0 END) sum_import_a
, sum(CASE WHEN cod_sum = 'b' THEN import ELSE 0 END) sum_import_b
, sum(CASE WHEN cod_sum = 'c' THEN import ELSE 0 END) sum_import_c
FROM tbl
GROUP BY 1, 2, 3
) x;