尝试在具有相同 "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 的构造的一些精确度:

  1. 显示的列Value1和Value 2都来自同一列,属于同一个table,并且使用相同的数据集。唯一的区别是有时满足条件而有时不满足条件。
  2. table可以有多个同名的字段,但我们希望每个名称只显示一个结果。
  3. 我无法以任何方式、形状或形式修改 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

VALUE1returns满足条件时Value的总和,而VALUE2returns满足Value的总和其余记录。