当前位置: 代码迷 >> Oracle开发 >> 请高手帮忙修改提供的SQL实现相应的功能,多谢
  详细解决方案

请高手帮忙修改提供的SQL实现相应的功能,多谢

热度:94   发布时间:2016-04-24 06:37:50.0
请高手帮忙修改提供的SQL实现相应的功能,谢谢
建表t和数据:
CREATE TABLE TEST
(
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,
  CALLEDNUM   VARCHAR2(20 BYTE)                 NOT NULL,
  CONCOST     NUMBER                            NOT NULL
)

Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 2);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 1.8);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.2);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.6);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.8);
-----------------------------------------------
select ti.*,
case when substr(ti.callednum,1,2) <> '00' and substr(ti.callednum,1,3) <> '100' then sum(ti.concost) over (partition by ti.callingnum order by ti.callednum) else 0 end leijia
from test ti
where CALLINGNUM='0664196' and CALLEDNUM='10086' 
-------------------------------------------------
修改如上SQL实现如下SQL实现的效果(主要是有CASE WHEN条件,所以不清楚该如何修改):
-------------------------------------------------
select callingnum,callednum,sum(concost)
from test
where CALLINGNUM='0664196' and CALLEDNUM='10086'
group by callingnum,callednum
------解决方案--------------------
引用:
建表t和数据:
CREATE TABLE TEST
(
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,
  CALLEDNUM   VARCHAR2(20 BYTE)                 NOT NULL,
  CONCOST     NUMBER                            NOT NULL
)

Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 2);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 1.8);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.2);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.6);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 0.8);
-----------------------------------------------
select ti.*,
case when substr(ti.callednum,1,2) <> '00' and substr(ti.callednum,1,3) <> '100' then sum(ti.concost) over (partition by ti.callingnum order by ti.callednum) else 0 end leijia
from test ti
where CALLINGNUM='0664196' and CALLEDNUM='10086' 
-------------------------------------------------
修改如上SQL实现如下SQL实现的效果(主要是有CASE WHEN条件,所以不清楚该如何修改):
-------------------------------------------------
select callingnum,callednum,sum(concost)
from test
where CALLINGNUM='0664196' and CALLEDNUM='10086'
group by callingnum,callednum



引用:
建表t和数据:
CREATE TABLE TEST
(
  CALLINGNUM  VARCHAR2(20 BYTE)                 NOT NULL,
  CALLEDNUM   VARCHAR2(20 BYTE)                 NOT NULL,
  CONCOST     NUMBER                            NOT NULL
)

Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 2);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
 Values
   ('0664196', '10086', 1.8);
Insert into TEST
   (CALLINGNUM, CALLEDNUM, CONCOST)
  相关解决方案