2016-04-09 8 views
1

日付範囲をフィルタする可能性のあるストアドプロシージャを作成したいと思います。 そして、私はデータを日付なしでグループ化して表示したいと考えています。ある期間において、どのようにSUMがすべての見込み客を従業員1人あたり訪問したか。SQLクエリは従業員一人あたりのアイテムを集計します - 日付範囲

今私はこれを持っていますが、十分ではありません。私はav.Dateを削除する必要がありますが、av.Dateがなければ、私の日付範囲をフィルターできません!

Select emp.Name+' '+emp.Surname as TaskOwner,av.Date,et.Event,COUNT(av.EventTypeID) as something 
from TableT av 
left join Employee emp on av.CreatedBy = emp.EmployeeD 
left join EventType et on av.EventTypeID = et.EventTypeID 
Group By av.Date, et.Event, emp.Name+' '+emp.Surname 
Order By TaskOwner desc 

私の現在の出力は、私は必要なもの

John Doe 2016-03-02 PROPOSALS ACCEPTED 1 
John Doe 2016-03-04 PROSPECTS VISITS 2 
John Doe 2016-03-07 COMMERCIAL VISITS 1 
John Doe 2016-03-08 PROPOSALS MADE   1 
John Doe 2016-03-13 PROPOSALS ACCEPTED 1 
Someone Else 2016-01-04 PROPOSALS MADE   1 
Someone Else 2016-03-03 COMMERCIAL VISITS 1 
Someone Else 2016-03-04 PROPOSALS ACCEPTED 1 
Someone Else 2016-03-06 PROPOSALS ACCEPTED 1 

のようなものである。このようなものです:

John Doe  PROPOSALS ACCEPTED 2 
John Doe  PROSPECTS VISITS 2 
John Doe  COMMERCIAL VISITS 1 
John Doe  PROPOSALS MADE  1 
Someone Else PROPOSALS MADE  1 
Someone Else COMMERCIAL VISITS 1 
Someone Else PROPOSALS ACCEPTED 2 

しかし、日付範囲によってフィルタリングすることができます。

答えて

1

クエリ

Select 
    emp.Name+' '+emp.Surname as TaskOwner, 
    et.Event, 
    COUNT(av.EventTypeID) as something 
from TableT av 
    left join Employee emp on av.CreatedBy = emp.EmployeeD 
    left join EventType et on av.EventTypeID = et.EventTypeID 
Where 
    (ISNULL (@lowerdate) OR av.Date >= ISNULL(CAST(@lowerdate as datetime)) 
    AND 
    (ISNULL (@higherdate) OR av.Date <= CAST(@higherdate as datetime)) 
-- this is how we filter, assuming you get two dates always and also taking care of NULL 
Group By et.Event, emp.Name+' '+emp.Surname 
Order By TaskOwner desc 
下に試すことができます
関連する問題