我有一个非常直截了当的查询,除了一个CASE WHEN
语句之外还有效。
我选择带有电话号码的记录,并将它们与另一个表格中的数字进行比较。这适用于入站呼叫,但即使我们已经验证了其中许多呼叫存在,出站呼叫也不会被接听。第一个问题是出站呼叫自动有一个' 1'放在前面的地方不要进入。我修剪了a.finallycalledpartyno
中的第一个字符,这是我们正在选择的出站号码,但它仍然无效。
我想知道我是不是没有正确使用它,或者是否有更好的方法。受影响的列是VARCHAR(45),如果这有很大的不同。但是,如果我研究记录,我会发现很多在电话号码上显示为入站的,并且出站的完全相同的号码不会被标记为已知,所以我觉得出站号码的格式是唯一的逻辑区别
任何帮助非常感谢。
SELECT
Recieved_Known
, Outbound
, Outbound_Known
FROM (
SELECT distinct
case when LEGTYPE1 = 2 and answered = 1 and CALLINGPARTYNO = k.phone_number then 'x' ELSE '' end as Recieved_Known
, CASE WHEN /*ANSWERED = 1 AND*/ LEGTYPE1 = 1 then 'x' ELSE '' end AS Outbound
, case when LEGTYPE1 = 1 and TRIM(leading '1' FROM a.FINALLYCALLEDPARTYNO) = k.phone_number then 'x' ELSE '' end as Outbound_Known
FROM session a
LEFT JOIN known_numbers k ON a.callingpartyno = k.phone_number
WHERE a.ts >= '2017-11-30'
and(a.CALLINGPARTYNO in (select extension from users)
OR a.finallycalledpartyno IN (select extension from users))
) x
order by extension;
答案 0 :(得分:1)
我不太确定您的TRIM功能有什么问题,但您可以使用以下CASE WHEN语句作为替代:
CASE WHEN LEGTYPE1 = 1
and Substring(a.FINALLYCALLEDPARTYNO,2,Len(a.FINALLYCALLEDPARTYNO)) = k.phone_number
then 'x' ELSE '' end as Outbound_Known
它应该做你想要达到的目标。