我试图将第三列包含到现有的 SQL Server 查询中,但我得到了重复的结果值。
以下是 中包含的数据的示例tb_IssuedPermits:
| EmployeeName | Current |
|--------------|---------|
| Person A | 0 |
| Person A | 0 |
| Person B | 1 |
| Person C | 0 |
| Person B | 0 |
| Person A | 1 |
Run Code Online (Sandbox Code Playgroud)
这是我当前的查询,它根据 1 或 0 位值生成重复值。
| EmployeeName | Current |
|--------------|---------|
| Person A | 0 |
| Person A | 0 |
| Person B | 1 |
| Person C | 0 |
| Person B | 0 |
| Person A | 1 |
Run Code Online (Sandbox Code Playgroud)
| EmployeeName | Count | Current |
|--------------|-------|---------|
| Person A | 2 | 0 |
| Person B | 1 | 0 |
| Person C | 1 | 0 |
| Person A | 1 | 1 |
| Person B | 1 | 1 |
Run Code Online (Sandbox Code Playgroud)
关于如何修改查询以获得以下预期结果有什么想法吗?我想要每个结果行EmployeeName。Current如果 存在EmployeeName带有 的行,则应为 1 Current = 1,否则应为 0。
| EmployeeName | Count | Current |
|--------------|-------|---------|
| Person A | 3 | 1 |
| Person B | 2 | 1 |
| Person C | 1 | 0 |
Run Code Online (Sandbox Code Playgroud)
结果不需要按任何特定顺序。
TIA
如果您的Current列包含字符串值'FALSE','TRUE'您可以执行此操作
SELECT EmployeeName, Count(*) AS Count,
MAX([Current]) AS Current
FROM tb_IssuedPermits
GROUP BY EmployeeName
Run Code Online (Sandbox Code Playgroud)
这是一种 hack,但它有效:如果有一组,MAX 将从每组中得到 TRUE。
如果您的Current列是 a BIT,则转换为INT并转换回来,如@ThorstenKettner建议的那样。
SELECT EmployeeName,
Count(*) AS Count,
CAST(MAX(CAST([Current] AS INT)) AS BIT) AS Current
FROM tb_IssuedPermits
GROUP BY EmployeeName
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用条件聚合:
SELECT EmployeeName,
Count(*) AS Count,
CAST(COUNT(NULLIF(Current, 0)) AS BIT) AS Current
FROM tb_IssuedPermits
GROUP BY EmployeeName
Run Code Online (Sandbox Code Playgroud)