2015-04-28 4 views
0

У меня есть таблица, в которой я выбрать следующие столбцыSQL Обобщить и группа

Work_Role 
Date_Invoice 
Bill_Amnt 

у меня есть несколько ролей работы выставления на несколько датах. Я хотел бы подвести итог этой работы на роль и увидеть количество фактурный в год на каждой колонке, только 2014 и 2015.

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

Work_Role  Bill_2014  Bill_2015  
P1   xxx,xxx  xxx,xxx 
P3   xxx,xxx  xxx,xxx  
E1   xxx,xxx  xxx,xxx 

ответ

2

Используйте выражение case условно просуммировать bill_amnt в зависимости в год:

select Work_Role, 
    sum(case when year(date_invoice) = 2014 then bill_amnt end) as "Bill_2014", 
    sum(case when year(date_invoice) = 2015 then bill_amnt end) as "Bill_2015" 
from your_table 
group by Work_Role 
1

Использование conditional case expression:

select role, 
sum(case when year(bill_date) = 2014 then amount else 0 end), 
sum(case when year(bill_date) = 2015 then amount else 0 end) 
from table 
group by role 
0

Вы также можете использовать запрос PIVOT:

SELECT 
    WORK_Role, 
    COALESCE(Bill_2014,0) AS Bill_2014, 
    COALESCE(Bill_2015,0) AS Bill_2015 
FROM (
    SELECT 
     Work_Role, 
     'Bill_'+str(year(Date_Invoice),4) as [year], 
     Bill_Amnt as Amount 
    FROM T 
) as T 
PIVOT 
(
    SUM(Amount) 
    FOR [year] IN (Bill_2014,Bill_2015) 
)AS p;