lz写的sql中除了一些问题, 大的问题是两个部分的逻辑是不同的
下面是个人修改后的两种描述
[php]
TOLL_FEE + INFO_FEE + OTHER_FEE + FAVOUR_BASE_FEE + FAVOUR_TOLL_FEE + FAVOUR_INFO_FEE + FAVOUR_OTHER_FEE
有点长, 用 fees 代替(为了看起来方便一点)
select dct.city_code,
city_name,
sum(fees) as fee1,
0 as fee2,
0 as fee3,
0 as fee4,
0 as fee5,
snap_date
from dm_call_ticket dct, etl.city c
where dct.city_code = city.city_code
and snap_date = to_date('20060406', 'YYYYMMDD')
group by dct.city_code, city_name, snap_date
union all
select dct.city_code,
city_name,
0 as fee1,
sum(fees) as fee2,
0 as fee3,
0 as fee4,
0 as fee5,
snap_date
from dm_call_ticket dct, etl.city c
where dct.city_code = city.city_code
and snap_date = to_date('20060408', 'YYYYMMDD') - 1
group by dct.city_code, city_name, snap_date
union all
select dct.city_code,
city_name,
0 as fee1,
0 as fee2,
sum(fees) as fee3,
0 as fee4,
0 as fee5,
snap_date
from dm_call_ticket dct, etl.city c
where dct.city_code = city.city_code
and snap_date = to_date('20060408', 'YYYYMMDD') - 7
group by dct.city_code, city_name, snap_date;
---------------------------------------------------------------------------------------------
select dct.city_code,
city_name,
sum(case when snap_date=to_date('20060406', 'YYYYMMDD') then fees else 0 end) as fee1,
sum(case when snap_date=to_date('20060408', 'YYYYMMDD') - 1 then fees else 0 end) as fee2,
sum(case when snap_date=to_date('20060408', 'YYYYMMDD') - 7 then fees else 0 end) as fee3,
0 as fee4,
0 as fee5,
snap_date
from dm_call_ticket dct, etl.city c
where dct.city_code = city.city_code
and snap_date in (to_date('20060406', 'YYYYMMDD'),
to_date('20060408', 'YYYYMMDD') - 1,
to_date('20060408', 'YYYYMMDD') - 7)
group by dct.city_code, city_name, snap_date;
----------------------------------------------------------------------------------------
[/php]
|