SQL 服务器:多列 GROUP BY 产生重复结果

SQL Server: GROUP BY with multiple columns produces duplicate results

我正在尝试将第 3 列包含到我现有的 SQL 服务器查询中,但我得到了重复的结果值。

这里是 tb_IssuedPermits 中包含的数据示例:

| EmployeeName | Current |
|--------------|---------|
| Person A     | 0       |
| Person A     | 0       |
| Person B     | 1       |
| Person C     | 0       |
| Person B     | 0       |
| Person A     | 1       |

这是我当前的查询,它根据 1 位或 0 位值生成重复值。

SELECT EmployeeName, COUNT(*) AS Count, [Current]
FROM tb_IssuedPermits
GROUP BY EmployeeName, [Current]
| EmployeeName | Count | Current |
|--------------|-------|---------|
| Person A     | 2     | 0       |
| Person B     | 1     | 0       |
| Person C     | 1     | 0       |
| Person A     | 1     | 1       |
| Person B     | 1     | 1       |

关于如何修改我的查询以获得以下预期结果的任何想法?我想要每个 EmployeeName 一个结果行。 Current 应为 1,如果 EmployeeName 存在一行 Current = 1,否则应为 0。

| EmployeeName | Count | Current |
|--------------|-------|---------|
| Person A     | 3     | 1       |
| Person B     | 2     | 1       |
| Person C     | 1     | 0       |

结果不需要按任何特定顺序排列。

TIA

如果您的 Current 列包含字符串值 'FALSE''TRUE',您可以这样做

SELECT EmployeeName, Count(*) AS Count, 
       MAX([Current]) AS Current
  FROM tb_IssuedPermits
 GROUP BY EmployeeName

这是一个 hack,但它有效:如果有一个组,MAX 将从每个组中获取 TRUE。

如果您的 Current 列是 BIT,转换为 INT 然后转换回来,如 所建议的那样。

SELECT EmployeeName,
       Count(*) AS Count, 
       CAST(MAX(CAST([Current] AS INT)) AS BIT) AS Current
  FROM tb_IssuedPermits
 GROUP BY EmployeeName

或者,您可以使用条件聚合:

SELECT EmployeeName,
       Count(*) AS Count, 
       CAST(COUNT(NULLIF(Current, 0)) AS BIT) AS Current
  FROM tb_IssuedPermits
 GROUP BY EmployeeName

你可以这样做

SELECT EmployeeName, Count(1) AS Count,SUM(CAST([Current]AS INT)) AS Current FROM tb_IssuedPermits GROUP BY EmployeeName