多个嵌套查询,用于计算每个类别的总数

时间:2013-11-27 12:11:43

标签: sql sql-server

我想询问有关如何在SQL Server上执行以下操作的任何建议

所需的输出列将是

EmpName | CompleteCalls | IncompleteCalls

基本上计算每个员工的完成呼叫和不完整呼叫的数量

当前的表结构是这样的

EmpName | Flag

位数据类型中的标志,表示完成呼叫或未完成呼叫。对于每种类型的呼叫,员工的姓名可以在不同的行中重复。 例如,员工可以在两行中同时拥有“完成”和“未完成”调用的两个标记。

现在我如何在SQL Server中执行此操作?到目前为止,我尝试了以下内容:

select EmpName, 
          (select count(*) 
             from call_log 
            where flag = 1 
              and EmpName in (select EmpName 
                                from call_log 
                               where flag = 1)  ) AS  [CompleteCalls] 
     FROM call_log

但是您可能会注意到,查询结果不准确,因为每个Employee将获得当前在桌面上的完整调用的总数。

TIA

2 个答案:

答案 0 :(得分:3)

试试这个:

SELECT EmpName,
       SUM(CASE WHEN Flag = 1 THEN 1 ElSE 0 END) AS COMPLETECALLS,
       SUM(CASE WHEN Flag = 0 THEN 1 ElSE 0 END) AS INCOMPLETECALLS
FROM call_log
GROUP BY EmpName

表中每行的SUM 1将分别为flag = 1或flag = 0。

答案 1 :(得分:2)

select SUM(CASE WHEN Complete=1 THEN 1 ELSE 0 END) AS NumComplete
, SUM(CASE WHEN Complete=0 THEN 1 ELSE 0 END) AS NumIncomplete
, EmpName
FROM call_log
GROUP BY EmpName