Sql 在CASE和subselect中使用时发生db2错误

Sql 在CASE和subselect中使用时发生db2错误,sql,db2,ibm-midrange,db2-400,Sql,Db2,Ibm Midrange,Db2 400,我在解决此错误时遇到问题,但当我运行以下查询时,我得到: SQL0115中的比较运算符无效 从文档中可以看出,这是因为我的CASE语句中的sub-select,但我不确定为什么。这是一个我正试图从MySQL迁移到DB2的查询,所以我知道会有一些问题,但我不明白为什么这会是一个特别的问题 基本上,在本例中,扩展名将是会话表中的finallycalledpartyno或callingpartyno,但我想根据我的用户表中的扩展名选择其中一个 因此,如果一个用户有扩展名1234,那么在会话表中,每个记

我在解决此错误时遇到问题,但当我运行以下查询时,我得到:

SQL0115中的比较运算符无效

从文档中可以看出,这是因为我的CASE语句中的sub-select,但我不确定为什么。这是一个我正试图从MySQL迁移到DB2的查询,所以我知道会有一些问题,但我不明白为什么这会是一个特别的问题

基本上,在本例中,扩展名将是会话表中的
finallycalledpartyno
callingpartyno
,但我想根据我的用户表中的扩展名选择其中一个

因此,如果一个用户有扩展名1234,那么在会话表中,每个记录都将有
最终调用partyno
调用partyno
作为1234,这就是我想用作
扩展名的内容。有没有什么特别的方法可以让我这样做

SELECT distinct
  case
  when callingpartyno       in  (select extension from hn.users where active = 1)
  then callingpartyno
  when finallycalledpartyno in  (select extension from hn.users where active = 1)
  then finallycalledpartyno
  end as extension
FROM
    hn.session a
    join hn.call_summary b
    on a.notablecallid = b.notablecallid
    where
    date(a.ts) >= curdate()
    and (
    callingpartyno in  (select extension from hn.users where active = 1)
    or  finallycalledpartyno in  (select extension from hn.users where active = 1)
    )
    group by extension
样本数据

finallycalledpartyno  |  callingpartyno  |  seconds
---------------------------------------------------
1234                        123456          20
1234                        123456          20
1234                        123456          20
123456                      1234            10
123456                      1234            10
123456                      1234            10
4321                        123456          20
4321                        123456          20
4321                        123456          20
123456                      4321            20
123456                      4321            20
123456                      4321            20
所以现在我可以得到两行

Extension | secondsWhereFC  |  secondsWhereCP
---------------------------------------------
1234            60                  30
4321            60                  60
对你有用吗

with query_res (finallycalledpartyno, callingpartyno, seconds) as (values 
  (1234 , 123456, 20) 
, (123456 , 4321 , 10) 
) 
, users (extension, active) as (values 
  (1234, 1) 
, (4321, 1) 
) 
select q.*, coalesce(c.extension, f.extension) 
from query_res q 
left join (select distinct extension from users where active=1) c on c.extension=q.callingpartyno 
left join (select distinct extension from users where active=1) f on f.extension=q.finallycalledpartyno;

为什么是分组依据?我从中提取了一些其他聚合数据,但我会为每个用户获得一条不同聚合指标的记录,因此,一旦说了所有的话,我就按照user@jarlh但是其他的聚合似乎是有效的,只是无法让这个选择工作,所以这就是为什么我只在这里包含示例数据和所需结果,这将非常有帮助。@GordonLinoff我使用一些示例数据和示例查询结果进行了更新,在那里我可以根据扩展的位置获得聚合数据