当前位置: 代码迷 >> Oracle开发 >> 求好手帮忙写个有难度的SQL
  详细解决方案

求好手帮忙写个有难度的SQL

热度:14   发布时间:2016-04-24 06:40:12.0
求高手帮忙写个有难度的SQL
CREATE TABLE test1
(
  CID             INTEGER                       NOT NULL,
  MAID             INTEGER                       NOT NULL,
  CALLINGNUM       VARCHAR2(10 BYTE)             NOT NULL, --呼叫号码
)

CREATE TABLE test2
(
  CID           INTEGER                         NOT NULL
)

CREATE TABLE test3
(
  MAID          INTEGER                         NOT NULL,
  PRICES        NUMBER(5,2)                     NOT NULL--套餐费用
)

CREATE TABLE test4
(
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,--呼叫号码
  CONCOST     NUMBER                            NOT NULL--通话费用
)

当呼叫号码以00或10086开头时,直接读取CONCOST;当呼叫号码不是以00或10086开头时,且通话费用大于套餐费用时读取concost的总和,当通话费用小于套餐费用时直接读取套餐费用,最后将3类费用相加。

请帮忙用一个查询语句写出来,非常感谢


------解决方案--------------------
select t1.cid,
       t1.callingnum,
       case
         when t1.callingnum like '00%' or t1.callingnum like '10086%' then
          sum(t4.concost)
         else
          greatest(sum(t4.concost), t3.prices)
       end
  from test1 t1, test3 t3, test4 t4
 where t1.maid = t3.maid(+)
   and t1.callingnum = t4.callingnum
 group by t1.cid, t1.CALLINGNUM, t3.prices

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

重新发下,请大家帮忙看下:
CREATE TABLE test1
(
  CID             INTEGER                       NOT NULL,
  MAID             INTEGER                       NOT NULL,
  CALLINGNUM       VARCHAR2(20 BYTE)             NOT NULL, --呼叫号码
)

insert into test1 values(1,1,'15800000000');
insert into test1 values(2,2,'15812345678');
insert into test1 values(3,3,'0075000');
insert into test1 values(3,4,'10086');

CREATE TABLE test2
(
  CID           INTEGER                         NOT NULL
)

insert into test2 values(1);
insert into test2 values(2);
insert into test2 values(3);
insert into test2 values(4);

CREATE TABLE test3
(
  MAID          INTEGER                         NOT NULL,
  PRICES        NUMBER(5,2)                     NOT NULL--套餐费用
)

insert into test3 values(1,10);
insert into test3 values(2,20);
insert into test3 values(3,30);
insert into test3 values(4,40);


CREATE TABLE test4
(
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,--呼叫号码
  CONCOST     NUMBER                            NOT NULL--通话费用
  相关解决方案