Informix SQL选择多行结果-如何在一行中显示?

Informix SQL选择多行结果-如何在一行中显示?,sql,informix,Sql,Informix,以下请求: select s.site_name as site, NVL(ct.calltypename,"<No queue assigned>") as queue, AVG(TO_NUMBER(cd.datavalue)) as average, count(distinct cr.callid) as count from callrecord cr left join calldata cd on cd.callid=cr.callid and cd.sitekey

以下请求:

select s.site_name as site, NVL(ct.calltypename,"<No queue assigned>") as queue,
  AVG(TO_NUMBER(cd.datavalue)) as average, count(distinct cr.callid) as count
from callrecord cr 
left join calldata cd on cd.callid=cr.callid and cd.sitekey=cr.arrivalsite and cr.requeuecount=cd.requeuecount-1 
left join calltypes ct on cr.arrivalsite=ct.sitekey and cr.calltypekey=ct.calltypekey
left join sites s on cr.arrivalsite=s.sitekey
where cd.datakey="key1"
group by site, queue

同样重要的是,每个队列应始终出现在同一列中;若并没有数据,则列应为空、null或零。我发现了一些MS SQL的示例,但它们在Informix中不起作用

我认为您可以使用窗口函数和条件聚合:

with t as (
      < your query here >
     )
select max(case when seqnum = 1 then site end) as site_1,
       max(case when seqnum = 1 then queue end) as queue_1,
       max(case when seqnum = 1 then average end) as average_1,
       . . . 
       max(case when seqnum = 6 then site end) as site_6,
       max(case when seqnum = 6 then queue end) as queue_6,
       max(case when seqnum = 6 then average end) as average_6,
from (select t.*,
             row_number() over (partition by site order by queue) as seqnum
      from t
     ) t;

我认为您可以使用窗口函数和条件聚合:

with t as (
      < your query here >
     )
select max(case when seqnum = 1 then site end) as site_1,
       max(case when seqnum = 1 then queue end) as queue_1,
       max(case when seqnum = 1 then average end) as average_1,
       . . . 
       max(case when seqnum = 6 then site end) as site_6,
       max(case when seqnum = 6 then queue end) as queue_6,
       max(case when seqnum = 6 then average end) as average_6,
from (select t.*,
             row_number() over (partition by site order by queue) as seqnum
      from t
     ) t;

我不能让你的例子起作用,但maxcase的想法。。。非常有帮助。最后,我用类似的代码实现了预期的结果。我无法使您的示例正常工作,但使用maxcase的想法。。。非常有帮助。最后,我用类似的代码实现了预期的结果。
with t as (
      < your query here >
     )
select max(case when seqnum = 1 then site end) as site_1,
       max(case when seqnum = 1 then queue end) as queue_1,
       max(case when seqnum = 1 then average end) as average_1,
       . . . 
       max(case when seqnum = 6 then site end) as site_6,
       max(case when seqnum = 6 then queue end) as queue_6,
       max(case when seqnum = 6 then average end) as average_6,
from (select t.*,
             row_number() over (partition by site order by queue) as seqnum
      from t
     ) t;