2013-10-22 54 views
1

我的表中的數據如下如何by子句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  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

如果羅賓,喬什&薩姆在完成當天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有希望的結果。謝謝

回答

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而不是distinct,以防我稍後需要聚合函數,但這就是我。如果您願意,可以使用Select Distinct。

+0

我們可以在group by子句中指定select語句嗎?如果這是不可能的,那麼請幫助我理解原因。謝謝 – Thomas

+0

不知道我完全理解這個問題,但讓我修改答案,看看它是否有幫助。查看修改。 – asantaballa