sql - 不能从子查询将行转换为列
问题描述
我目前在尝试将行转换为子查询中的列时遇到了实际问题。我需要创建一个简单的表来计算每个代理的多个属性(为简单起见,我目前只包含一个聚合字段),然后将行转换为列。
本质上,我想要的只是获取子查询的输出并使 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'))
解决方案
只需使用条件聚合:
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;
推荐阅读
- c# - 如何比较两个列表并更新列表值
- spring - 限制用户仅为自己创建数据
- spinalhdl - 是否可以从 Bits 转换为 SpinalEnum?
- amazon-web-services - AWS ALB 目标组在自定义 VPC 中显示运行状况不佳的实例
- sql - 需要获取 XML 节点中的两个列?
- android - android 应用程序是否默认支持两个方向?
- swift - 快速减少标题和表格视图单元格之间的空间
- python-3.x - AWS Textract 无法识别 PDF 文档第二页的表格
- python - 如何根据条件从查询集中删除项目,然后在 django 中作为 json 响应返回
- javascript - 在 Angular 中实现 Gridstack 3