根据值

时间:2017-08-24 18:42:46

标签: mysql sql

我觉得这应该很简单,但由于某种原因,我无法理解这个问题。

在我的下面的查询中,我只是简单地连接一些表并将每个表中的数据放入一个小/简洁的表中。但是,它在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);

示例数据:

enter image description here

如果我只是放入LEGTYPE值,这就是我得到的,但我希望它只填充Inbound列(如果它是2)和outbound列(如果它是1)。

在会话表中,LEGTYPE1是一个smallint列。

1 个答案:

答案 0 :(得分:1)

据我所知,您正在尝试获取IF函数的返回值并将其命名为LEGTYPE1,对吗?

当前解决方案无效的原因是您将LEGTYPE1用作函数,而实际上它是一个字段。

相反,你可以这样做:

CASE WHEN a.LEGTYPE1 = 2 AND ANSWERED = 1 
THEN 1 ELSE 0 END AS YourFieldNameHere