2014-10-02 4 views
0

У меня есть следующий тест столсумма значений с SQL сервером

id Actual  Budget  CA  RUB_ID 
------------------------------------------- 
1  20   30  201  902 
1  2   330  202  902 
1  220  130  207  90 
1  21   30  20  12 

Как можно получить следующий результат

Actual  Budget  CA  
20  130   12 

мне нужно сделать просуммировать Actual если RUB_ID = 902, сумма бюджета, если RUB_ID = 90, сумма CA, если RUB_ID = 12

select 
    id, 
    case 
     when RUB_ID = 902 then sum(Actual) AS Actual 
     else case 
       when RUB_ID = 90 
       then sum(Budget) as Budget 
       else case 
         when RUB_ID = 12 then sum(CA) as CA 
FROM 
    TEST 
group by 
    id 

запрос не вернуть то, что я ищу, как я могу изменить его?

+1

, что * делает * Ваше возвращение запрос ? – jbutler483

+0

'select id, sum (case when rub_id = 902 then actual else 0 end) as sum_actual, sum (case when rub_id = 90 then budget else 0 end) as sum_budget из тестовой группы по id' –

+0

@ gloomy.penguin post, что как ответ .. не в комментариях. – paqogomez

ответ

3

Поставь заявления случае внутри суммы функций

select 
    sum(case when RUB_ID = 902 then Actual else 0 end) Actual, 
    sum(case when RUB_ID = 90 then Budget else 0 end) Budget, 
    sum(case when RUB_ID = 12 then CA else 0 end) CA 
from test where RUB_ID IN (902,90,12) 

, если вы хотите, чтобы эти результаты по идентификатору

select 
    id, 
    sum(case when RUB_ID = 902 then Actual else 0 end) Actual, 
    sum(case when RUB_ID = 90 then Budget else 0 end) Budget, 
    sum(case when RUB_ID = 12 then CA else 0 end) CA 
from test where RUB_ID IN (902,90,12) 
group by id 
+2

Я думаю, вам может понадобиться сделать 'then actual' to ...' then actual', 'then budget',' then ca' –

+0

спасибо, обновлено – FuzzyTree

+0

@ gloomy.penguin Я думаю, вы обнаружите, что у него [это прямо на] (http://sqlfiddle.com/#!3/49206/1). Что не хватает в этом? – paqogomez

2

Что-то вроде этого:

SELECT 
    id 
    , SUM(CASE RUB_ID WHEN 902 THEN Actual ELSE 0 END) as Actual 
    , SUM(CASE RUB_ID WHEN 90 THEN Budget ELSE 0 END) as Budget 
    , SUM(CASE RUB_ID WHEN 12 THEN CA ELSE 0 END) as CA 
FROM TEST 
GROUP BY id 
Смежные вопросы