2016-09-08 4 views
0

Мне нужно показать следующие результаты за несколько лет одновременно. Таким образом, вместо запуска этого отчета на 2014 год, затем 2015 года и, наконец, в 2016 году я хотел бы запускать его один раз в течение всех трех лет (@startDate & @endDate). Не уверен, будет ли накопительный пакет работать? Или группировки? Пользователь хотел бы сравнить данные за несколько лет. Благодаря!Данные за несколько лет.

select ct.srv_ct_label as service, count (distinct cln.cln_urn) as total 
from cw_domain dmn 
inner join cw_service srv on srv.srv_dmn_fk=dmn.dmn_pk 
inner join cw_client cln on cln.cln_pk=srv.srv_cln_fk 
inner join cw_subservice sbs on sbs.sbs_pk=srv.srv_sbs_fk 
inner join cw_service_category ct on ct.srv_ct_rpk=sbs.sbs_srv_ct_rfk 
where 
srv_ct_rpk in (
'001', 
'002', 
'004', 
'025', 
'040', 
'003', 
'026', 
'017', 
'016', 
'034', 
'041', 
'042', 
'018', 
'029' 
) 
and srv.srv_date >[email protected] and srv.srv_date <=endDate 
group by ct.srv_ct_label, srv_ct_rpk, srv.srv_date 
order by 
case srv_ct_rpk 
when '001' then 1 
when'040' then 2 
when '003' then 3 
when '025' then 4 
when '002' then 5 
when '004' then 6 
when '041' then 7 
when '026' then 8 
when '017' then 9 
when '034' then 10 
when '042' then 11 
when '018' then 12 
when '029' then 13 
end 

ответ

0

Добавить столбец year(srv.srv_date) as srv_year в вашем select, group by и order by в соответствии с требованиями:

select year(srv.srv_date) as srv_year, ct.srv_ct_label as service, count (distinct cln.cln_urn) as total 
from cw_domain dmn 
inner join cw_service srv on srv.srv_dmn_fk=dmn.dmn_pk 
inner join cw_client cln on cln.cln_pk=srv.srv_cln_fk 
inner join cw_subservice sbs on sbs.sbs_pk=srv.srv_sbs_fk 
inner join cw_service_category ct on ct.srv_ct_rpk=sbs.sbs_srv_ct_rfk 
where 
srv_ct_rpk in (
'001', 
'002', 
'004', 
'025', 
'040', 
'003', 
'026', 
'017', 
'016', 
'034', 
'041', 
'042', 
'018', 
'029' 
) 
and srv.srv_date >[email protected] and srv.srv_date <=endDate 
group by year(srv.srv_date), ct.srv_ct_label, srv_ct_rpk, srv.srv_date 
order by year(srv.srv_date), 
case srv_ct_rpk 
when '001' then 1 
when'040' then 2 
when '003' then 3 
when '025' then 4 
when '002' then 5 
when '004' then 6 
when '041' then 7 
when '026' then 8 
when '017' then 9 
when '034' then 10 
when '042' then 11 
when '018' then 12 
when '029' then 13 
end 
0

кажется, что вы хотите, чтобы сравнить и показать их в горизонтальном пути. Поэтому я рекомендую использовать selfjoin, как показано ниже.

select * from 
(select ... 
from tableA join tableB join ... 
on ... 
where srv.srv_date = 2014) as a 
JOIN 
(select ... 
from tableA join tableB join ... 
on ... 
where srv.srv_date = 2015) as b ON ... 
JOIN 
(select ... 
from tableA join tableB join ... 
on ... 
where srv.srv_date = 2016) as c ON ... 
Смежные вопросы