2016-11-27 22 views
0

Буду признателен, если кто-нибудь может мне помочь в этом. В Postgres У меня есть таблица, которая выглядит следующим образомСумма за внешний ключ


id  | main_table_id | tax_id | value | tax_value 
------ | ------------ | ------ | ------ | ------ 
1  | 1    | 1  | 10.00 | 1.00 
2  | 1    | 2  | 15.00 | 2.00 
3  | 1    | 1  | 17.00 | 3.00 

Так или иначе, мне нужно суммировать столбцы «значение» и «tax_value» над TAX_ID и получить результат, как этот


| main_table_id | sum_value_1 | sum_value_2 | sum_tax_value_1 | sum_value_2 
| ------------ | ------ ------| ------------ | -----------------| ------- 
| 1    | 27.00  | 15.00  | 4.00    | 2.00 

sum_value_1 является сумма (стоимость) для TAX_ID = 1,

sum_value_2 является суммой (значение) для TAX_ID = 2,

sum_tax_value_1 является суммой (tax_value) для TAX_ID = 1,

sum_tax_value_2 является суммой (tax_value) для TAX_ID = 2 ..

В таблице 'налоги' У меня есть 10 различных налогов и TAX_ID является ФК.

Возможно ли это?

+1

'У меня 10 различных налогов' ... и вы ожидаете 10 столбцов за каждый налог? –

+0

Я не понимаю вопрос? Мне нужно суммировать значение и value_tax так, как я пытался объяснить. – Stiglic

ответ

1

Одним из методов является условной агрегации:

select mt.main_table_id, 
     sum(case when mt.tax_id = 1 then mt.value else 0 end) as sum_value_1, 
     sum(case when mt.tax_id = 1 then mt.tax_value else 0 end) as sum_tax_value_1, 
     sum(case when mt.tax_id = 2 then mt.value else 0 end) as sum_value_2, 
     sum(case when mt.tax_id = 2 then mt.tax_value else 0 end) as sum_tax_value_2 
from maintable mt 
group by mt.main_table_id; 

Вы можете легко обобщить, добавив несколько sum(. . .) выражений.

1
SELECT SUM(VALUE), SUM(TAX_VALUE) FROM TABLE_NAME GROUP BY TAX_ID;