首页 > 解决方案 > 尝试在具有相同“名称”时融合行

问题描述

在 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    |

笔记 :

由于表的构建方式,两个选择都可以返回不同数量的行。

关于表的构造有点精确:

  1. 显示的列 Value1 和 Value 2 都来自同一列,属于同一表,并且使用相同的数据集。唯一的区别是有时满足某个条件,有时则不满足。
  2. 该表可以有多个具有相同名称的字段,但我们希望每个名称只显示一个结果。
  3. 我不能以任何方式修改表格或其结构,形状或形式,即使我认为结构可以改进很多。

如果有人知道这样做的方法,那将有很大帮助。

标签: sqlsql-server-2014

解决方案


您可以使用条件聚合

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其余记录的总和。


推荐阅读