2015-05-10 2 views
1

У меня есть таблица со следующей структурой (он не может изменить) с композитным первичным ключомSQL Заявление Sum с Группировать

Key1 (composite primary key) 
Key2 (composite primary key) 
Key3 (composite primary key) 
Code (also part of Primary Key) 
Amount 
Active 

Пользователем вводит коды для каждого Key1, Key2, ключ3, код и сумму. Существует 3 кода, для которых пользователь делает запись. Я могу сгруппировать их вместе, чтобы отобразить сумму суммы каждого кода, key1, key2 и key3.

SELECT  SUM(Amount) AS sum 
FROM   Table 
GROUP BY Key1, Key2, Key3, Code 

Однако, я должен написать SQL, чтобы отобразить результат, как этот

Key1 Key2 Key3 SumoofAmountsfCode1 SumoofAmountsfCode2 SumoofAmountsfCode3 
+1

Вы ищете [pivot] (https: // technet .microsoft.com/EN-US/библиотека/ms177410% 28В = sql.105% 29.aspx)? – JodyT

+1

Вы можете выполнить [условную агрегацию] (http://www.codeproject.com/Articles/310674/Conditional-Sums-in-SQL-Aggregate-Methods). –

ответ

3

Есть по крайней мере два способа сделать это:

SELECT 
    Key1, 
    Key2, 
    Key3, 
    sum(case when code = 1 then Amount else 0 end) SumoofAmountsfCode1, 
    sum(case when code = 2 then Amount else 0 end) SumoofAmountsfCode2, 
    sum(case when code = 3 then Amount else 0 end) SumoofAmountsfCode3 
from Table 
group by Key1, Key2, Key3 

Или с помощью PIVOT

SELECT 
    Key1, 
    Key2, 
    Key3, 
    IsNull([1],0) SumoofAmountsfCode1, 
    IsNull([2],0) SumoofAmountsfCode2, 
    IsNull([3],0) SumoofAmountsfCode3 
from Table A 
pivot (sum(amount) for code in ([1],[2],[3])) B 
Смежные вопросы