我的表格数据如下
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
如果特定专家在同一天完成多个工作,那么我想显示1
如果罗宾,乔什&amp; Sam在同一天完成了10个工作,然后将在当天显示3个工作
然后输出就像
FinishDate Count
----------------------- ------
2012-10-01 00:00:00.000 3
2012-10-02 00:00:00.000 5
2012-10-03 00:00:00.000 15
所以请指导我如何自定义我的sql以获得欲望的结果。感谢
答案 0 :(得分:2)
尝试这些方面的东西。语法可能不完美(做“徒手”)
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进行单一选择分组,那么您将得到的是这两者中不同的组合的计数。
你想要的是获得在日期中至少有一个条目的独特的SpecialistNames。区别是因为你关心他们有一个条目,但不管他们是否有1或3或17.这是由内部查询完成的。
然后您希望将这些不同的SpecialistName与相应的日期一起使用,并通过FinishDate对它们进行汇总,以按日期获取专家计数。这是由外部查询完成的。
你的评论的一部分提到了区别,你可以在内部查询中使用Select Distinct而不是Group By,因为我们不需要在那里进行计数。外部查询确实需要Group By,因为您需要计数。我自己的偏见是使用group by而不是以后我需要一个聚合函数,但那就是我。如果您愿意,可以使用Select Distinct。