2015-06-01 3 views
0

Help All,Запрос Informix Где пункт

Я пишу запрос в Informix и застревает в предложении where. У меня есть 2 CSQnames, которые я хочу выбрать, и некоторые моменты, и все остальные, которые я хочу показать между другим временем. Мой запрос выполнялся отлично, пока я не добавил этот конкретный оператор where. Если кто-то может предложить предложения, я бы очень признателен. Я получаю общую ошибку. В Informix, поскольку я не могу поставить оператор if then в предложении where, как бы переписать мой синтаксис? Благодаря!

SELECT 
(ccd.nodeid||"-"||ccd.sessionid||"-"||ccd.sessionseqnum) as sequenceID, 
ccd.sessionid as sessionid, 
ccd.sessionseqnum as sequencenum, 
ccd.applicationName as AppName, 
csqname as CSQName, ccd.flowout, ccd.conference, 

CASE WHEN contacttype=1 THEN "Incoming" 
       WHEN contacttype=2 THEN "Outgoing" 
       WHEN contacttype=3 THEN "In House" 
       WHEN contacttype=4 THEN "Redirect In" 
       WHEN contacttype=5 THEN "Transfer In" 
END as ContactType, 
CASE WHEN contactdisposition = 1 THEN "Abandoned" 
       WHEN contactdisposition = 2 THEN "Handled" 
       WHEN contactdisposition = 4 THEN "Aborted" 
       WHEN contactdisposition >= 5 THEN "Rejected" 
END as ContactDisposition, 
CASE WHEN originatortype=1 THEN "Agent" 
       WHEN originatortype=2 THEN "Device" 
       ELSE "Unknown" 
END as OriginatorType, 
CASE WHEN destinationtype=1 THEN "Agent" 
       WHEN destinationtype=2 THEN "Device" 
       ELSE "Unknown" 
END as DestinationType, 
DATE(ccd.startdatetime) as date, 
ccd.startdatetime as starttime, 
ccd.enddatetime as endtime, 
res.resourcename, ccd.transfer, ccd.redirect, 
ccd.originatordn, ccd.destinationdn, 
crd.queuetime/86400 as queuetime, 
acd.talktime/86400 as TalkTime, 
acd.holdtime/86400 as HoldTime, 
acd.worktime/86400 as WorkTime 
FROM contactcalldetail ccd 
       Left JOIN contactroutingdetail crd ON crd.sessionID = ccd.sessionID 
       AND crd.sessionSeqNum = ccd.sessionSeqNum 
       AND crd.nodeID = ccd.nodeID 
       AND crd.profileID = ccd.profileID 
       LEFT JOIN agentconnectiondetail acd ON acd.sessionID = ccd.sessionID 
       AND acd.sessionSeqNum = ccd.sessionSeqNum 
       AND acd.nodeID = ccd.nodeID 
       AND acd.profileID = ccd.profileID 
       LEFT JOIN resource res ON acd.resourceid = res.resourceid 
left join contactqueuedetail cqd on cqd.sessionid=crd.sessionid 
left join contactservicequeue csq on cqd.targetid= csq.recordid 

WHERE (
       ccd.startdatetime BETWEEN '2014-1-2 13:00:00' AND '2016-12-31 22:30:00' 

     AND (
     if (csqname in ("CSQ_Emeriti" , "SOS-Emeriti") 

AND EXTEND(ccd.startdatetime, HOUR TO second) > DATETIME(13:30:00) HOUR TO SECOND 
       AND EXTEND(ccd.startdatetime, HOUR TO second) < DATETIME(22:00:00) HOUR TO SECOND 
                ) 
      or(csqname not in (“CSQ_Emeriti" , "SOS-Emeriti") 
AND 
       EXTEND(ccd.startdatetime, HOUR TO second) > DATETIME(13:00:00) HOUR TO SECOND 

AND EXTEND(ccd.startdatetime, HOUR TO second) < DATETIME(22:30:00) HOUR TO SECOND 
            ) 
        ) 
        AND WEEKDAY(ccd.startdatetime) BETWEEN 1 AND 5 
        AND (contacttype IN (1,4,5)) 
        AND ccd.originatordn !='2155870700' 
    ) 
+3

именно КАК это не работает для вас? –

+0

Я получаю общую ошибку (вот что она говорит). Мой код запускается, когда я удаляю операторы if и просто имею одно логическое предложение. – Jason

+2

Пожалуйста, сделайте отступы меньшими, чтобы код действительно можно было читать, не прокручивая много. –

ответ

1

Если запрос на Informix, if не доступен в предложении о SQL заявленияWHERE.

Если я правильно вас понял, что вы хотите:

... 
AND (
     ( 
      csqname in ("CSQ_Emeriti" , "SOS-Emeriti") 
      AND EXTEND(ccd.startdatetime, HOUR TO second) > DATETIME(13:30:00) HOUR TO SECOND 
      AND EXTEND(ccd.startdatetime, HOUR TO second) < DATETIME(22:00:00) HOUR TO SECOND 
     ) 
    OR 
     (
      csqname not in ("CSQ_Emeriti" , "SOS-Emeriti") 
      AND EXTEND(ccd.startdatetime, HOUR TO second) > DATETIME(13:00:00) HOUR TO SECOND 
      AND EXTEND(ccd.startdatetime, HOUR TO second) < DATETIME(22:30:00) HOUR TO SECOND 
     ) 
) 
... 

Keen уважение.

+0

@ Ricardo Thanks работает как шарм! – Jason

Смежные вопросы