我觉得这应该很简单,但由于某种原因,我无法理解这个问题。
在我的下面的查询中,我只是简单地连接一些表并将每个表中的数据放入一个小/简洁的表中。但是,它在LEGTYPE1
的第一行遇到了问题,并显示the FUNCTION a.LEGTYPE1 does not exist
。
LEGTYPE1
是'a'表中包含1或2的列,我需要它在入站列中输入'1',如果它是1且ANSWERED = 1且a如果值为'2',则在出站列中为2。
我在另一个表中有一个类似的查询做同样的事情,除了它得到所有LEGTYPE值1和2的总和,它工作正常,但我认为这是因为我使用了一个总和,这只是为了把价值本身。
以下是查询:
Insert into test.AMBrawDataDump(
Extension,
Start_Time,
End_Time,
Duration,
Inbound_Answered,
Missed,
Outbound,
Hold_Time)
SELECT
c.extension -- USER EXTENSION
, b.STARTTIME -- Start of call
, b.ENDTIME -- End of call
, b.DURATION -- Length of call
, LEGTYPE1(if(LEGTYPE1 = 2,1,0) and ANSWERED = 1) -- Inbound answered calls
, b.ANSWERED(if(Answered = 1,0,1)) -- Missed Calls
, a.LEGTYPE1(IF(LEGTYPE1 = 1, 1, 0)) -- Outbound calls
, a.HOLDTIMESECS -- Hold time in seconds
FROM cdrdb.session a
INNER JOIN cdrdb.callsummary b
ON a.NOTABLECALLID = b.NOTABLECALLID
INNER join cdrdb.mxuser c
ON a.RESPONSIBLEUSEREXTENSIONID = c.EXTENSIONID
WHERE b.ts BETWEEN curdate() - interval 90 day and curdate()
AND c.extension IN (7276,7314,7295,7306,7357,7200,7218,7247,7331,7255,7330,7000,7215,7240,7358,7312)
ORDER BY c.extension, DATE(b.ts);
示例数据:
如果我只是放入LEGTYPE值,这就是我得到的,但我希望它只填充Inbound列(如果它是2)和outbound列(如果它是1)。
在会话表中,LEGTYPE1是一个smallint列。
答案 0 :(得分:1)
据我所知,您正在尝试获取IF函数的返回值并将其命名为LEGTYPE1,对吗?
当前解决方案无效的原因是您将LEGTYPE1用作函数,而实际上它是一个字段。
相反,你可以这样做:
CASE WHEN a.LEGTYPE1 = 2 AND ANSWERED = 1
THEN 1 ELSE 0 END AS YourFieldNameHere