首页 > 解决方案 > 不能从子查询将行转换为列

问题描述

我目前在尝试将行转换为子查询中的列时遇到了实际问题。我需要创建一个简单的表来计算每个代理的多个属性(为简单起见,我目前只包含一个聚合字段),然后将行转换为列。

本质上,我想要的只是获取子查询的输出并使 Agent_Name 中的值成为 Columns 和 Outcome_1 字段成为行,然后 Outcome_2 ..3 等等;但是,到目前为止,我的尝试只列出了代理名称,但没有列出 OUTCOME_1 或任何值。

使用 Oracle 数据库

当前代码尝试

Select *
from
(Select AGENT_NAME, OUTCOME_1 from
(select AGENT_NAME, 
SUM(CASE when CLOSING_REASON = 6 then 1 else 0 end) as OUTCOME_1
from all_cases
join
users
on all_cases.user_ID = USers.ID
where Group_ID = 14
and Start_time > to_DATE ('01/04/2020 00:00:00', 'DD-MM-YYYY HH24:MI:SS')
group by FULL_NAME)T1)
Pivot(MAX(OUTCOME_1) for AGENT_NAME in ('USER1','User2','User3','User4'))

标签: sqloraclepivot

解决方案


只需使用条件聚合:

select u.agent_name,
       sum(case when CLOSING_REASON = 6 then 1 else 0 end) as OUTCOME_1,
       . . . 
from all_cases ac join
     users
     on ac.user_ID = u.ID
where Start_time >= date '2020-04-01'
group by u.agent_name;

如果您希望代理旋转并在行上产生结果,那么想法是相同的,只是细节发生了变化:

select closing_reason,
       sum(case when agent_name = 'a' then 1 else 0 end) as agent_a,
       sum(case when agent_name = 'b' then 1 else 0 end) as agent_b,
       . . . 
from all_cases ac join
     users
     on ac.user_ID = u.ID
where Start_time >= date '2020-04-01'
group by u.agent_name;

推荐阅读