+ -
当前位置:首页 → 问答吧 → 求高手sql2005的函数改成oracle的函数语法该怎么变动?

求高手sql2005的函数改成oracle的函数语法该怎么变动?

时间:2011-11-06

来源:互联网

CREATE FUNCTION [dbo].[fun_AgtRateByMin]
( @start DATETIME,@end DATETIME ,@uid VARCHAR(20) )

RETURNS TABLE 
AS
RETURN 
(
SELECT
 u.uid AS [工号]
,u.name AS [姓名]
,ISNULL(SUM(CASE WHEN a.io=0 THEN 1 ELSE 0 END),0) AS [呼入总量]
,ISNULL(SUM(CASE WHEN a.io=0 AND a.AnswerFlag=1 THEN 1 ELSE 0 END),0) AS [呼入接通量]
,ISNULL(SUM(CASE WHEN a.io=0 AND a.AnswerFlag=1 THEN a.TalkDuration ELSE 0 END),0) AS [呼入通话时长]
,ISNULL(SUM(CASE WHEN a.io=1 THEN 1 ELSE 0 END),0) AS [呼出总量]
,ISNULL(SUM(CASE WHEN a.io=1 AND a.AnswerFlag=1 THEN 1 ELSE 0 END),0) AS [呼出接通量]
,ISNULL(SUM(CASE WHEN a.io=1 AND a.AnswerFlag=1 THEN a.TalkDuration ELSE 0 END),0) AS [呼出通话时长]
,i.freesec AS [空闲时长]
,i.pausesec AS [小休时长]
,i.doingsec AS [后台时长]
,i.confsec AS [会议时长]
,i.traningsec AS [培训时长]
,i.dinnersec AS [就餐时长]
FROM dbo.rc_calllog a 
LEFT JOIN 
(
SELECT 
uid 
,ISNULL(SUM(CASE WHEN status='空闲' THEN duration ELSE 0 END),0) AS freesec
,ISNULL(SUM(CASE WHEN status='小休' THEN duration ELSE 0 END),0) AS pausesec
,ISNULL(SUM(CASE WHEN status='主动服务' THEN duration ELSE 0 END),0) AS doingsec
,ISNULL(SUM(CASE WHEN STATUS='会议' THEN duration ELSE 0 END),0) AS confsec
,ISNULL(SUM(CASE WHEN STATUS='培训' THEN duration ELSE 0 END),0) AS traningsec
,ISNULL(SUM(CASE WHEN STATUS='就餐' THEN duration ELSE 0 END),0) AS dinnersec
FROM dbo.rc_statrecord WHERE starttime BETWEEN @start AND @end GROUP BY uid
)i ON a.AgentId= i.uid 
INNER JOIN dbo.rc_operator u ON a.AgentId=u.uid
WHERE a.InboundCallTime BETWEEN @start AND @end OR a.StartRingTime BETWEEN @start AND @end
GROUP BY u.uid,u.name,i.freesec,i.pausesec,i.doingsec,i.confsec,i.traningsec,i.dinnersec
)


作者: pdw391624592   发布时间: 2011-11-06

SQL code
CREATE FUNCTION [dbo].[fun_AgtRateByMin]
( @start DATETIME,@end DATETIME ,@uid VARCHAR(20) )

RETURNS TABLE  
AS
RETURN  
(
SELECT
 u.uid AS [工号]
,u.name AS [姓名]
,nvl(SUM(CASE WHEN a.io=0 THEN 1 ELSE 0 END),0) AS [呼入总量]
,nvl(SUM(CASE WHEN a.io=0 AND a.AnswerFlag=1 THEN 1 ELSE 0 END),0) AS [呼入接通量]
,nvl(SUM(CASE WHEN a.io=0 AND a.AnswerFlag=1 THEN a.TalkDuration ELSE 0 END),0) AS [呼入通话时长]
,nvl(SUM(CASE WHEN a.io=1 THEN 1 ELSE 0 END),0) AS [呼出总量]
,nvl(SUM(CASE WHEN a.io=1 AND a.AnswerFlag=1 THEN 1 ELSE 0 END),0) AS [呼出接通量]
,nvl(SUM(CASE WHEN a.io=1 AND a.AnswerFlag=1 THEN a.TalkDuration ELSE 0 END),0) AS [呼出通话时长]
,i.freesec AS [空闲时长]
,i.pausesec AS [小休时长]
,i.doingsec AS [后台时长]
,i.confsec AS [会议时长]
,i.traningsec AS [培训时长]
,i.dinnersec AS [就餐时长]
FROM dbo.rc_calllog a  
LEFT JOIN  
(
SELECT  
uid  
,nvl(SUM(CASE WHEN status='空闲' THEN duration ELSE 0 END),0) AS freesec
,nvl(SUM(CASE WHEN status='小休' THEN duration ELSE 0 END),0) AS pausesec
,nvl(SUM(CASE WHEN status='主动服务' THEN duration ELSE 0 END),0) AS doingsec
,nvl(SUM(CASE WHEN STATUS='会议' THEN duration ELSE 0 END),0) AS confsec
,nvl(SUM(CASE WHEN STATUS='培训' THEN duration ELSE 0 END),0) AS traningsec
,nvl(SUM(CASE WHEN STATUS='就餐' THEN duration ELSE 0 END),0) AS dinnersec
FROM dbo.rc_statrecord WHERE starttime BETWEEN @start AND @end GROUP BY uid
)i ON a.AgentId= i.uid  
INNER JOIN dbo.rc_operator u ON a.AgentId=u.uid
WHERE a.InboundCallTime BETWEEN @start AND @end OR a.StartRingTime BETWEEN @start AND @end
GROUP BY u.uid,u.name,i.freesec,i.pausesec,i.doingsec,i.confsec,i.traningsec,i.dinnersec
)

作者: lzd_83   发布时间: 2011-11-06