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