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'
)
именно КАК это не работает для вас? –
Я получаю общую ошибку (вот что она говорит). Мой код запускается, когда я удаляю операторы if и просто имею одно логическое предложение. – Jason
Пожалуйста, сделайте отступы меньшими, чтобы код действительно можно было читать, не прокручивая много. –