sql - 尝试在具有相同“名称”时融合行
问题描述
在 SQL 中,当它们的名称相同时,我试图融合两行。
现在我有一个如下所示的 SQL 查询:
SELECT TABLE.Name, SUM(TABLE.Value) AS VALUE1, 0 AS VALUE2
FROM TABLE
WHERE TABLE.Bool = true
GROUP BY TABLE.Name
SELECT TABLE.Name, 0 AS VALUE1, SUM(TABLE.Value) AS VALUE2
FROM TABLE
WHERE TABLE.Bool = false
GROUP BY TABLE.Name
给我一个看起来像这样的结果:
|Name |Value1 |Value2 |
------------------------------
|Name1 |1000 |0 |
|Name2 |2000 |0 |
|Name3 |3000 |0 |
|Name |Value1 |Value2 |
------------------------------
|Name1 |0 |0001 |
|Name2 |0 |0002 |
|Name3 |0 |0003 |
使用 UNION 运算符将产生如下结果:
|Name |Value1 |Value2 |
------------------------------
|Name1 |1000 |0 |
|Name2 |2000 |0 |
|Name3 |3000 |0 |
|Name1 |0 |0001 |
|Name2 |0 |0002 |
|Name3 |0 |0003 |
我想获得的结果是这样的:
|Name |Value1 |Value2 |
------------------------------
|Name1 |1000 |0001 |
|Name2 |2000 |0002 |
|Name3 |3000 |0003 |
笔记 :
由于表的构建方式,两个选择都可以返回不同数量的行。
关于表的构造有点精确:
- 显示的列 Value1 和 Value 2 都来自同一列,属于同一表,并且使用相同的数据集。唯一的区别是有时满足某个条件,有时则不满足。
- 该表可以有多个具有相同名称的字段,但我们希望每个名称只显示一个结果。
- 我不能以任何方式修改表格或其结构,形状或形式,即使我认为结构可以改进很多。
如果有人知道这样做的方法,那将有很大帮助。
解决方案
您可以使用条件聚合:
SELECT TABLE.Name,
SUM(case when TABLE.Bool = true then TABLE.Value else 0 end) AS VALUE1,
SUM(case when TABLE.Bool = false then TABLE.Value else 0 end) AS VALUE2
FROM TABLE
GROUP BY TABLE.Name
VALUE1
返回Value
满足条件时的总和,而VALUE2
返回Value
其余记录的总和。
推荐阅读
- powershell - 使用 power shell 从 git show 中提取 id
- docker - Kibana 未连接到 Elasticsearch (["warning","elasticsearch","admin"],"pid":12,"message":"No living connections"})
- python - 如何通过添加字符串将返回值作为参数传递?
- json - 替换数组值的键对象
- sql - 父为PK的SQL中同一表查询中的递归父/子
- javascript - 由于复选框的关闭状态,脚本导致输出字段中的“关闭”值
- python - RuntimeError:大小不匹配,m1:[64 x 512],m2:[8192 x 512] 在 /pytorch/aten/src/THC/generic/THCTensorMathBlas.cu:290
- azure-devops - 克隆 Azure Devops yaml 管道
- ios - UITableViewCell 内的 UICollectionView 的 Swift 差异
- ruby-on-rails - Rails 6 中的根路由在哪里?