2016-04-09 28 views
1

Tarih aralıklarını filtrelemeye olanak veren saklı yordam oluşturmak istiyorum. Ve verilerim olmadan gruplandırılmış olarak gösterilmek istiyorum. Bazı dönemlerde, SUM çalışan başına düşen tüm ziyaret sayılarıydı.SQL sorgusu, çalışanlara göre özeti - tarih aralığı

Şimdi buna sahibim ama yeterince iyi değil. Av.Date'i kaldırmalıyım ama av.Date olmadan tarih aralığımı filtreleyemiyorum!

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 

Ama tarih aralıkları süzülmeye mümkün yapın: Ne gerek böyle bir şeydir

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 

gibi

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 

Benim şu anki çıkıştır.

cevap

1

sorgu altına deneyebilirsiniz

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