日期:2014-05-17  浏览次数:20714 次

40分 求一条sql语句。。
1. 表结构:
客户表
create table DB2ADMIN.tb_cust
(cust_id char(10) not null,  
cust_type char(2), 客户类型(vip,pt)
cust_time date, 入网时间
id varchar(18),
primary key(cust_id) );


用户表
CREATE TABLE DB2ADMIN.tb_subs
( subs_id varchar(11) NOT NULL , 
  cust_id char(10) ,  
  phone_number varchar(11),  
  brand char(2), 品牌
  subs_time date,
  subs_city varchar(8), 入网时间  
  PRIMARY KEY ( subs_id) ) ;

品牌表
create table code_brand(
brand_id char(2),  
brand_desc varchar(10) 
);
0 动感地带
1 神州行
2 全球通

呼叫详细记录

create table cdr_gsm(
phone_number varchar(12) not null, //电话号码
imei varchar(21), 串号
call_time timestamp not null, 呼叫开始时间
call_type char(2), 呼叫类型(被叫,主叫)
peering_type varchar(10), 对端类型(联通,移动,电信)
longcall_type varchar(10), 长途类型(省内,省级,国际)
roaming_type varchar(10),漫游类型(省内,省级,国际)
end_time timestamp, 结束时间
call_cost float(10), 话费
primary key(phone_number,call_time)
);

短信详细记录
create table adr_sms(
phone_number varchar(12) not null, 电话号码
imei varchar(21), 串号
sms_time timestamp not null, 开始时间
sms_type char(2), 短信类型(被发,主发)
end_time timestamp, 结束时间
sms_cost float(10), 短信话费
primary key(phone_number,sms_time)
);
-----  



查出本月内漫游类型为国际漫游的这部分客户的品牌、入网时间、所在区域、长途费用、漫游费用主叫费用、被叫费用、短信次数及费用,本地通话次数及费用



------解决方案--------------------
长途费用、漫游费用、主叫费用、被叫费用
本地通话次数及费用
是怎么计算的?
------解决方案--------------------
select *
from 
(select s.phone_number,s2.brand_desc,s1.subs_time,s.call_cost
from cdr_gsm s,tb_subs s1,code_brand s2,adr_sms s3
where to_char(s.call_time,'YYYY-MM-DD')=substr(to_char(sysdate,'yyyy-mm-dd'),0,7)
and s.roaming_type='国际' and s1.phone_number=s.phone_number and s1.brand(+)=s2.brand_id) aa
,
(select s4.phone_number,count(*),sum(sms_cost) from adr_sms s4 group by s4.phone_number) ss 
where aa.phone_number=ss.phone_number
短信次数费用!