分析一下此SQL如何写才能高效一点?
有个问题是这样的:在主表(ca_siw)当中,有个派发地市字段(send_city),它的字段值是这样的: 1/2/3/4/12/13
另外还有:reply_time:要求回复时限字段其中数字来源于地市公司的area_id字段, 它属于表rms_area,
主表ca_siw当中的send_city就是要派发到哪几个地市去,1/2/3/4/12/13是rms_area表中area_id的字段组合.派发了单子后,要进行回单处理.回单处理记入了表cap_siw当中
这个表中记录了回单时间:commit_time,回单人地市:areaId现在要求统计:已回复地市,未回复的地市,超时回复地市,未超时回复地市列表
这个SQL该如何写?
有个问题是这样的:在主表(ca_siw)当中,有个派发地市字段(send_city),它的字段值是这样的: 1/2/3/4/12/13
另外还有:reply_time:要求回复时限字段其中数字来源于地市公司的area_id字段, 它属于表rms_area,
主表ca_siw当中的send_city就是要派发到哪几个地市去,1/2/3/4/12/13是rms_area表中area_id的字段组合.派发了单子后,要进行回单处理.回单处理记入了表cap_siw当中
这个表中记录了回单时间:commit_time,回单人地市:areaId现在要求统计:已回复地市,未回复的地市,超时回复地市,未超时回复地市列表
这个SQL该如何写?
解决方案 »
- 请问TNSPing的使用语法
- 哪有ASP+Oracle开发的项目源码下载啊?
- oracle与VB连接
- sqlserver2000 移植到 Oracle9i 自增列问题
- 运行代码的时候执行了一系列语句,报错ORA-01722无效字符,但是很奇怪,我调代码之后什么都没改的情况下又好使了,几天来都是这样,求高手指教原因
- 急救!高手请进!
- 10G客户端连不上9i的数据库
- 如何取得一个表中的最后一个记录??
- 一个update语句,请大家看看
- 大家帮个忙!! 谢谢,急!!!!!!!!!!!!!!!!!!
- 如何用命令行来创建包中的存储过程?
- 在linux如何用C调用oracle以数组作为参数的存储过程,谢谢!
1/2/3/4/12/13这是send_city字段的值?
每个对应一个area_id?
要送往这么多个城市吗
按这么说,一个单发往好几个城市,那么commit_time里记录的是哪个城市的回单时间
select a.city_id,b.area_name from(
select substr('/'||send_city,instr('/'||send_city,'/',1,rownum)+1,
instr('/'||send_city||'/','/',1,rownum+1)-instr('/'||send_city,'/',1,rownum)-1)city_id,
reply_time
from ca_siw
connect by rownum<=length(send_city)-length(replace(send_city,'/',''))+1)a,
rms_area b,cap_siw c
--后面的条件
--及时回复的城市
--where a.city_id=b.area_id and a.city_id=c.area_id
--and a.reply_time>=c.commit_time
--超时回复的城市
--where a.city_id=b.area_id and a.city_id=c.area_id
-- and a.reply_time<c.commit_time
--未回复的城市
--where a.city_id=b.area_id and a.city_id=c.area_id(+)
-- and c.area_id is null
这个表有个字段,记录area_id,user_id,commit_time
,表明某个地市的某个人什么时间回单.如果设子表楼上的该如何设置?一个主单关联多个send_city吗?
添加一个单号与城市代码的关系表
(
SERVICE_ID NUMBER not null,
CUSTOMER_ID VARCHAR2(50),
CUSTOMER_NAME VARCHAR2(300),
SEND_CITY VARCHAR2(300),
REPLY_TIME DATE
)
insert into ca_siw values(1,'0001','1/2/3/4/12','2009-09-01 15:01:01')create table CAP_SIW_FLOW
(
PROJECT_ID NUMBER not null,
LINK VARCHAR2(64),
EXECUTE_ID NUMBER,
AREA_ID NUMBER not null,
COMMIT_DATE DATE,
NEXT_ID VARCHAR2(500),
ACTION VARCHAR2(128)
)
insert into ca_siw_flow values(1,'回单',85,1,'2009-09-01 13:01:01',86,'完成')
insert into ca_siw_flow values(1,'回单',100,2,'2009-09-01 13:01:09',86,'完成')
insert into ca_siw_flow values(1,'回单',200,3,'2009-09-01 16:11:01',86,'完成')表cap_siw_flow中的project_id字段的值是表ca_siw表中的service_id的值,ca_siw与cap_siw_flow是一对多.
上面的数据是指service_id字段值为1的记录,被回单.它要求1/2/3/4/12这5个地市公司进行回单,AREA_ID字段是回单地市编号.在cap_siw_flow表中已经有1,2,3三个地市进行了回单.,commit_date是回单时间
因此目前未回复的地市就是编号为12的值
已经回复的地市就是1,2,3,4这四个
超时回复的为:3