带有Sum的Oracle SQL交叉表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有Sum的Oracle SQL交叉表相关的知识,希望对你有一定的参考价值。

我是Oracle SQL的新手,我的任务是使用SQL创建交叉表报表。我有一个单一的源表,其结构与此类似:

TABLE STRUCTURE

我正在尝试交叉表示结果,以显示每个州的员工总数如下:

DESIRED RESULTS

理想情况下,我想动态地迎合新州开设的办事处。

我一直在调查PIVOTS,但似乎无法理解它。我们将非常感激地收到任何指导。

谢谢。

答案

PIVOT中,您可以从源子查询开始。 然后,您可以定义要聚合另一个字段中哪些标题的字段。

SELECT *
FROM
(
  SELECT Company, State, Staff
  FROM YourCompanyStaffTable
  WHERE State IN ('Illinois', 'Texas', 'Tennessee', 'Missouri', 'Kansas', 'Indiana')
) src
PIVOT (
  SUM(Staff)
  FOR State IN (
    'Illinois' as Illinois, 
    'Texas' as Texas, 
    'Tennessee' as Tennessee, 
    'Missouri' as Missouri, 
    'Kansas' as Kansas, 
    'Indiana' as Indiana
  )
) pvt
ORDER BY Company

在此查询中,新的列名称是从“State”列生成的。 请注意,在源查询中,这些名称也有限制。 这只是出于效率原因。 (从表中提取的数据较少)

并且它将按照PIVOT声明中未使用的源字段对结果进行分组。 在这种情况下,它会自动在“公司”列上进行分组。

因此,它为每个“公司”的每个“州”总计“工作人员”。

另一答案

用例何时

select company, sum(case when state='Illinois' then staff else 0 end) as  Illinois,
 sum(case when state='Texas' then staff else 0 end) as  Texas,
 sum(case when state='Tennessee' then staff else 0 end) as  Tennessee,
 sum(case when state='Missouri' then staff else 0 end) as  Missouri,
 sum(case when state='Kansas' then staff else 0 end) as  kansas,
sum(case when state='Indiana' then staff else 0 end) as  Indiana from t
group by company

以上是关于带有Sum的Oracle SQL交叉表的主要内容,如果未能解决你的问题,请参考以下文章

[Oracle]Oracle良性SQL建议

将 T-SQL 交叉应用转换为 Oracle

Oracle SQL性能优化

ORACLE 中 SQL语句优化

带有 SUM 的 Oracle 案例陈述

Oracle SQL性能优化技巧大总结