首页 > 解决方案 > 带有 Sum 的 Oracle SQL 交叉表

问题描述

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

表结构

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

期望的结果

理想情况下,我想动态地满足在新州开设的办公室的需求。

我一直在研究 PIVOTS,但似乎无法理解它。任何指导将不胜感激。

谢谢你。

标签: sqloraclepivotcrosstab

解决方案


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

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

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

因此,它将每个“公司”的每个“州”的“员工”总数相加。


推荐阅读