sql - 带有 Sum 的 Oracle SQL 交叉表
问题描述
我是 Oracle SQL 的新手,我的任务是使用 SQL 创建交叉表报告。我有一个单一的源表,其结构简单,类似于:
我正在尝试对结果进行交叉表分析,以显示每个州的员工总数,如下所示:
理想情况下,我想动态地满足在新州开设的办公室的需求。
我一直在研究 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
在此查询中,新列名是从“状态”列生成的。
请注意,在源查询中,这些名称也有限制。
这只是出于效率的原因。(从表中提取的数据更少)
它将按 PIVOT 声明中未使用的源字段对结果进行分组。
在这种情况下,它会自动在“公司”列中分组。
因此,它将每个“公司”的每个“州”的“员工”总数相加。
推荐阅读
- apache-kafka - Confluent S3 sink 连接器中的解析问题 [序列化错误]
- firebase - 映射到函数的 Firebase 托管重写因内部错误而失败
- mysql - 如果字段为空则更新,否则忽略
- jinja2 - 如何使用 JinjaTemplates 渲染和过滤字典列表
- c# - 使用 IText7 从 PDF 文档中提取 PDF 组字段值
- java.util.scanner - java.util.Scanner 在 NetBeans 12.3 上不起作用
- javascript - 具有不均匀时间间隔数据点的图表 js 条形图,从 django 日期时间解析
- acumatica - Acumatica 数据拉取
- python-3.x - 如何运行适当的贝叶斯逻辑回归
- c++ - [Boost::ext].SML:使用“_”(下划线)占位符时如何在“on_entry<_>”和“on_exit<_>”中获取“真实”事件