尝试在具有相同 "name" 时融合行
Trying to fuse row when with same "name"
在 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 |
注:
由于 table 的构建方式,两个选择可以 return 不同的行数。
关于 table 的构造的一些精确度:
- 显示的列Value1和Value 2都来自同一列,属于同一个table,并且使用相同的数据集。唯一的区别是有时满足条件而有时不满足条件。
- table可以有多个同名的字段,但我们希望每个名称只显示一个结果。
- 我无法以任何方式、形状或形式修改 table 或其结构,即使我认为该结构可以改进很多。
如果有人知道这样做的方法,那将大有帮助。
您可以使用条件聚合:
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
returns满足条件时Value
的总和,而VALUE2
returns满足Value
的总和其余记录。
在 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 |
注:
由于 table 的构建方式,两个选择可以 return 不同的行数。
关于 table 的构造的一些精确度:
- 显示的列Value1和Value 2都来自同一列,属于同一个table,并且使用相同的数据集。唯一的区别是有时满足条件而有时不满足条件。
- table可以有多个同名的字段,但我们希望每个名称只显示一个结果。
- 我无法以任何方式、形状或形式修改 table 或其结构,即使我认为该结构可以改进很多。
如果有人知道这样做的方法,那将大有帮助。
您可以使用条件聚合:
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
returns满足条件时Value
的总和,而VALUE2
returns满足Value
的总和其余记录。