2015-12-07 62 views
-6

對於幫助臺應用程序,我們已經開放日期,關閉日期,技術人員姓名。 使用sql server如何創建查詢以顯示月份和多年:在一段時間內計數

  • 每個月關閉了多少個工作?
  • 這個月的最後一天有多少工作在隊列中,因爲技術員姓名沒有關閉?
  • 按技術員姓名按月份平均工作的平均天數?

感謝

+0

我會使用SSMS創建查詢,但您可以在任何文本編輯器中執行此操作。 –

回答

0

您所需要的查詢使用GROUP BY子句一個非常簡單的SQL語句。由於您只是詢問需要按日期分組的信息,以及需要按日期分組的信息以及技術人員,所以您應該使用GROUPING SETS。

select year(closed) as year 
, month(closed) as month 
, Technician 
, count(*) as count 
, avg(datediff(DAY,Opened, Closed)) as avgDays 
from jobs 
where not Closed is null 

group by grouping sets 
(
    (year(closed), month(Closed)), 
    (year(closed), month(Closed), technician) 
) 
order by year(closed) 
, month(closed) 
, Technician 

如果您希望未關閉的作業在WHERE子句中刪除NOT,

+0

謝謝 - 但這並沒有給我在每個月底開放的工作的數量 - 所以對於2015年1月,我需要知道在那個月的最後一天有多少工作沒有關閉。當我運行查詢時(例如12月),從1月份開始的舊歷史工作將全部關閉,因此在WHERE子句中刪除NOT將無濟於事。這是否需要子查詢? – David

0

這是一個部分答案,在日期字段中每個月的第一天使用助手錶。這不是由技術人員分組,但確實計算'待處理作業'

select date, 
(select COUNT(1) FROM dbo.TASKS WHERE 
OPENDATE<=date AND 
(CLSDDATE>=date Or CLSDDATE is null))as 'Pending jobs', 
(select COUNT(1) FROM dbo.TASKS WHERE 
month(CLSDDATE)=MONTH(date) AND YEAR(clsddate)=YEAR(date)) as 'Completed jobs', 
(select AVG(datediff(DAY,OPENDATE, CLSDDATE)) as avgDays FROM dbo.TASKS WHERE 
month(CLSDDATE)=MONTH(date) AND YEAR(clsddate)=YEAR(date)) as 'AvgDays' 
from dbo.CalendarMonths 

where date<=GETDATE()