1

次のように私のテーブルデータ

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をカスタマイズして希望の結果を得る方法を教えてください。ありがとう

4

1 に答える 1

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

必要なグループ化が異なるため、2 つの選択である必要があります。FinishDate と SpecialistName による単一選択のグループ化を行った場合、得られるのは、これら 2 つの異なる組み合わせの数になります。

必要なのは、日付に少なくとも 1 つのエントリがある個別の SpecialistNames を取得することです。エントリがあったことは気にしますが、1 か 3 か 17 かは気にしないため、区別されます。これは、内部クエリによって行われます。

次に、これらの個別の SpecialistName と対応する日付を取得し、それらを FinishDate で要約して、日付ごとにスペシャリストの数を取得します。これは、外側のクエリによって行われます。

コメントの一部で Distinct について言及されていますが、実際には内部クエリで Group By の代わりに Select Distinct を使用できます。これは、カウントが必要ないためです。カウントが必要なため、外側のクエリには Group By が必要です。私自身のバイアスは、後で集計関数が必要になった場合に備えて、distinct ではなく group by を使用することですが、それは私です。必要に応じて Select Distinct を使用しても問題ありません。

于 2013-10-22T11:14:37.307 に答える