sql - 如何内部连接多个 sum/group 查询,每个查询都有不同的 where 子句?
问题描述
在下面的代码上使用UNION
会产生两列:
[Operator Company Name]
Sum(Gross Acres)
由于 5 个查询,每个[Operator Company Name]
记录(行)有 5 个。
如何正确编写 a UNION
or JOIN
where 5 个查询中的每一个的结果都生成一个独立的列,然后将它们全部加入,[Operator Company Name]
以便新查询输出为每列 1 条记录和 6 列(共同名称 + 5 个查询结果)
SELECT [Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(Gross Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian'
GROUP BY [Operator Company Name];
union
SELECT [Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(TX DEL Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian' AND [COUNTY/PARISH] Like '*Reeves*' OR [COUNTY/PARISH] Like '*Culberson*' OR [COUNTY/PARISH] Like '*Pecos*' OR [COUNTY/PARISH] Like '*Loving*' OR [COUNTY/PARISH] Like '*Ward*' OR [COUNTY/PARISH] Like '*Winkler*'
GROUP BY [Operator Company Name];
union
SELECT [Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(N MID Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian' AND [COUNTY/PARISH] Like '*Dawson*' OR [COUNTY/PARISH] Like '*Borden*' OR [COUNTY/PARISH] Like '*Martin*' OR [COUNTY/PARISH] Like '*Howard*'
GROUP BY [Operator Company Name];
union
SELECT [Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(NM DEL Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian' AND [COUNTY/PARISH] Like '*Eddy*' OR [COUNTY/PARISH] Like '*Lea*'
GROUP BY [Operator Company Name];
union
SELECT [Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(S MID Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian' AND [COUNTY/PARISH] Like '*Midland*' OR [COUNTY/PARISH] Like '*Glasscock*' OR [COUNTY/PARISH] Like '*Upton*' OR [COUNTY/PARISH] Like '*Reagan*'
GROUP BY [Operator Company Name];
实际结果应包括每列 1 条记录与列
[Operator Company Name]
- 所有查询都由[Sum(Gross Acres)]
[Sum(TX DEL Acres)]
[Sum(N MID Acres)]
[Sum(NM DEL Acres)]
[Sum(S MID Acres)]
解决方案
您应该能够使用条件聚合来解决这个问题。
诀窍在于在IIF
每个语句中使用一个语句,该语句SUM()
包含来自相应原始子查询的条件。如果满足条件,则应在 中考虑该值SUM
,否则应忽略该值。
考虑:
SELECT
[Operator Company Name],
Sum([Area (Gross Acres)]) AS [Sum(Gross Acres)],
Sum(
IIF(
(
[COUNTY/PARISH] Like '*Reeves*'
OR [COUNTY/PARISH] Like '*Culberson*'
OR [COUNTY/PARISH] Like '*Pecos*'
OR [COUNTY/PARISH] Like '*Loving*'
OR [COUNTY/PARISH] Like '*Ward*'
OR [COUNTY/PARISH] Like '*Winkler*'
),
[Area (Gross Acres)],
0
)
) AS [Sum(TX DEL Acres)],
Sum(
IIF(
(
[COUNTY/PARISH] Like '*Dawson*'
OR [COUNTY/PARISH] Like '*Borden*'
OR [COUNTY/PARISH] Like '*Martin*'
OR [COUNTY/PARISH] Like '*Howard*'
),
[Area (Gross Acres)],
0
)
) AS [Sum(N MID Acres)],
Sum(
IIF(
(
[COUNTY/PARISH] Like '*Eddy*'
OR [COUNTY/PARISH] Like '*Lea*'
),
[Area (Gross Acres)],
0
)
) AS [Sum(NM DEL Acres)],
Sum(
IIF(
(
[COUNTY/PARISH] Like '*Midland*'
OR [COUNTY/PARISH] Like '*Glasscock*'
OR [COUNTY/PARISH] Like '*Upton*'
OR [COUNTY/PARISH] Like '*Reagan*'
),
[Area (Gross Acres)],
0
)
) AS [Sum(S MID Acres)]
FROM Enervus_PrivateData
WHERE [US Region] Like 'Permian'
GROUP BY [Operator Company Name];
推荐阅读
- c++ - 如何在内核 C++ 中使用 1920x1080x16M 图形或具有 16M 颜色的类似图形?(VGA)
- apache-storm - Apache Storm:WindowedBoltExecutor 如何处理 FailedException?
- xamarin - VS Community 2019:内存无法读取
- powershell - Intune 使用 Graph API 恢复特定配置
- flutter - 我如何在颤振中自定义 flappy_search_bar
- next.js - 如何在 NextJS 中动态创建子页面/子路由?
- java - 一对一关系的方法 POST
- docker - 错误:- 来自守护进程的错误响应:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“
- xamarin - 使用 Xamarin 表单进行剃须刀支付
- python-3.x - PYSPARK org.apache.spark.sql.AnalysisException:无法解析给定输入列的“INPUT__FILE__NAME”