Sql server 2005 如何在sql server 2005的group by子句中使用子查询

Sql server 2005 如何在sql server 2005的group by子句中使用子查询,sql-server-2005,Sql Server 2005,我的表格数据如下 FinishDate SpecialistName jobstate ----------------------- --------------- --------- 2012-10-01 00:00:00.000 Josh FINISHED 2012-10-01 00:00:00.000 Josh FINISHED 2012-10-01 00:00:00.000

我的表格数据如下

FinishDate                  SpecialistName  jobstate
-----------------------     --------------- ---------
2012-10-01 00:00:00.000     Josh            FINISHED
2012-10-01 00:00:00.000     Josh            FINISHED
2012-10-01 00:00:00.000     Sam             FINISHED
2012-10-01 00:00:00.000     Robin           FINISHED
2012-10-01 00:00:00.000     Robin           FINISHED
2012-10-01 00:00:00.000     Joy             FINISHED
2012-10-01 00:00:00.000     Joy             INCOMMING
2012-10-02 00:00:00.000     Joy             FINISHED
我的问题如下

select Count(*) [Count] from employee
where convert(varchar,FinishDate,112)>='20121001' 
and convert(varchar,FinishDate,112) <='20121001'  
and JobState='FINISHED'
group by SpecialistName

所以,请指导我如何自定义sql以获得所需的结果。谢谢

尝试一下这些方法。语法可能不是完美的手绘

Select 
  TheDate
, Count(*) [Count]
From
(
    select 
      convert(varchar,FinishDate,112) TheDate
    , SpecialistName
    from employee
    where convert(varchar,FinishDate,112)>='20121001' 
    and convert(varchar,FinishDate,112) <='20121001'  
    and JobState='FINISHED'
    group by 
      convert(varchar,FinishDate,112)
    , SpecialistName
) t1    
Group By 
  TheDate
它必须是两个选择,因为您想要的分组是不同的。如果您按FinishDate和SpecialistName进行单选分组,您将得到这两种不同组合的计数

您想要的是获得在一个日期中至少有一个条目的独特专业名称。区别是因为您关心他们有一个条目,但不关心他们是否有1、3或17。这是由内部查询完成的

然后,您需要将这些不同的专家名称与相应的日期进行比较,并按FinishDate对其进行汇总,以获得按日期计算的专家数量。这是由外部查询完成的


您的评论中有一部分提到了Distinct,实际上您可以在内部查询中使用Select Distinct而不是Group By,因为这里不需要计数。外部查询确实需要Group By,因为您确实需要计数。我自己的偏好是使用groupby而不是distinct,以防以后需要聚合函数,但我就是这样。如果愿意,可以使用Select Distinct。

我们可以在group by子句中指定Select语句吗。像group by一样,从员工中选择不同的专业名称如果不可能,请帮助我了解原因。谢谢,我不确定我是否完全理解这个问题,但让我修改一下答案,看看是否有帮助。请参见编辑。
Select 
  TheDate
, Count(*) [Count]
From
(
    select 
      convert(varchar,FinishDate,112) TheDate
    , SpecialistName
    from employee
    where convert(varchar,FinishDate,112)>='20121001' 
    and convert(varchar,FinishDate,112) <='20121001'  
    and JobState='FINISHED'
    group by 
      convert(varchar,FinishDate,112)
    , SpecialistName
) t1    
Group By 
  TheDate