当前位置: 代码迷 >> Oracle开发 >> 求1SQL,查询每笔通话数据是套餐内还是套餐外,非常感谢
  详细解决方案

求1SQL,查询每笔通话数据是套餐内还是套餐外,非常感谢

热度:72   发布时间:2016-04-24 06:37:46.0
求一SQL,查询每笔通话数据是套餐内还是套餐外,非常感谢。
CREATE TABLE TS_MATERIALS--套餐资费
(
  MAID          INTEGER                         NOT NULL,
  MANAME        VARCHAR2(100 BYTE)              NOT NULL,
  PRICES        NUMBER(5,2)                     NOT NULL,--套餐价格
  CHARGESLOCAL  NUMBER(3,2)                     NOT NULL,--本地通话费用
  CHARGESLONG   NUMBER(3,2)                     NOT NULL,--长途通话费用
  ARULES        INTEGER,--本地免费通话时长
  REMARK        VARCHAR2(500 BYTE)
)

Insert into TS_MATERIALS  Values    (9, '80元套餐', 80, 0.08, 0.15,     50); 
Insert into TS_MATERIALS  Values    (7, '50元套餐', 50, 0.08, 0.15,     50); 
Insert into TS_MATERIALS  Values    (8, '100元套餐', 100, 0.08, 0.15,     50); 
Insert into TS_MATERIALS  Values    (6, '66元套餐', 66, 0.08, 0.15,     50); 
COMMIT;

CREATE TABLE TS_INVENTORY--通话记录
(
  ID          INTEGER                           NOT NULL,
  EXTENNUM    VARCHAR2(20 BYTE)                 NOT NULL,
  BILLEDTYPE  VARCHAR2(20 BYTE)                 NOT NULL,
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,--主叫号码
  CALLEDNUM   VARCHAR2(20 BYTE)                 NOT NULL,--被叫号码
  STARTTIME   DATE                              NOT NULL,--通话开始时间
  ENDTIME     DATE                              NOT NULL,--通话结束时间
  CONTIME     INTEGER                           NOT NULL,--通话时长
  CONCOST     NUMBER                            NOT NULL,--通话费用
  MAID        INTEGER                           NOT NULL--套餐ID
)
Insert into TS_INVENTORY  Values (1987, '000', 'DISA外呼', '0691558', '29769350', TO_DATE('05/28/2014 10:28:16', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('05/28/2014 10:30:12', 'MM/DD/YYYY HH24:MI:SS'), 116, 0.12, 9); 
Insert into TS_INVENTORY  Values (1988, '000', 'DISA外呼', '0691558', '013614052136', TO_DATE('05/28/2014 09:42:38', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('05/28/2014 09:45:10', 'MM/DD/YYYY HH24:MI:SS'), 152, 0.45, 9); 
Insert into TS_INVENTORY  Values (2314, '000', 'DISA外呼', '0691558', '11183', TO_DATE('06/09/2014 09:55:57', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('06/09/2014 10:00:39', 'MM/DD/YYYY HH24:MI:SS'), 282, 0.3, 9); 
Insert into TS_INVENTORY  Values (2315, '000', 'DISA外呼', '0691558', '13434742002', TO_DATE('06/09/2014 09:06:50', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('06/09/2014 09:07:01', 'MM/DD/YYYY HH24:MI:SS'), 11, 0.06, 9); 
Insert into TS_INVENTORY  Values (1956, '000', 'DISA外呼', '0691558', '013197766488', TO_DATE('05/31/2014 16:50:24', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('05/31/2014 16:51:21', 'MM/DD/YYYY HH24:MI:SS'), 57, 0.15, 9);
 

实现如下SQL实现的功能,写视图或存储过程都可以(需要再加上一列,得出每笔通话是套餐内消费还是套餐外消费):

套餐外消费
1、ARULE=0。比如套餐资费50,剩2元,打通3元,这通电话属套餐外消费。国内电话累计额<=50,算50 累计>50,超出部分属套餐外消费。
  相关解决方案