任務說明及要求:
現有一個資料庫SQL Server 2000,裡麵包含著72個小時的高速公路各個收費站的資料。現要求:查詢72個小時內這個資料庫裡面的各個收費站每間隔十分鐘通過各個收費站的車輛數。例如:查詢濟南北這個收費站的情況,則統計 2005-07-22 00:00:00到2005-07-22 00:10:00 通過濟南北收費站的車輛數,統計完以後,再統計2005-07-22 00:10:00到2005-07-22 00:20:00 通過濟南北收費站的車輛數,以此類推。最好能編一個程式,能讓各個10分鐘間隔時間段通過某一收費站車輛數一目瞭然。
程式碼如下:
以下部分是為了測試SQL代碼是否正確分來步驟進行的。最終代碼只需要三四步。--第一步:一個十分鐘內的濟南北車站的數量--測試該語句的正確與否select * from trafficdata where dot1name='濟南北'and time1>='2005-07-22 00:00:00' and time1<'2005-07-22 00:10:00' or dot2name='濟南北' and time2>='2005-07-22 00:00:00' and time2<'2005-07-22 00:10:00'; --第二步:列印一個時間間隔的車輛數--測試該SQL Server預存程序文法語句正確與否--“@temp1=convert(varchar(3),@temp)”表示將int型變數轉化成varchar型變數create PROCEDURE GetCountasDeclare @temp1 varchar(3)Declare @temp IntSELECT @temp = COUNT(*) FROM trafficdata where dot1name='濟南北'and time1>='2005-07-22 00:00:00' and time1<'2005-07-22 01:00:00' or dot2name='濟南北' and time2>='2005-07-22 00:00:00' and time2<'2005-07-22 01:00:00';set @temp1=convert(varchar(3),@temp)print @temp1--第三步:建立預存程序--該預存程序沒有輸入參數,將需要的資料直接列印--“DATEADD(mi, 10,@start_date )”表示函數使變數@start_date增加十分鐘--While迴圈部分 Begin--End配對 Drop PROCEDURE mysp_para Create PROCEDURE mysp_para AS Declare @start_date DateTime --迴圈開始時間 Declare @end_date DateTime --迴圈結束時間 Declare @temp2 varchar(3) --用來接收每次迴圈的車輛數目 Varchar類型 Declare @temp1 varchar(8000) --所有迴圈的車輛數目 以逗號間隔 Declare @temp Int --用來接收每次迴圈的車輛數目 Int類型 Declare @Size Int --迴圈次數 Declare @address varchar(10) --收費站名稱 Set @start_date='07 23 2005 '; Set @Size=0; Set @address='濟南北'; Set @temp2=''; Set @temp1=''; while (@Size<3*24*6) Begin Set @end_date=DATEADD(mi, 10,@start_date ); Set @temp=0; SELECT @temp = COUNT(*) FROM trafficdata where dot1name=@address and time1>=@start_date and time1<@end_date or dot2name=@address and time2>=@start_date and time2<@end_date; Set @temp2=convert(varchar(3),@temp); Set @temp1=@temp1+ @temp2+','; Set @start_date=@end_date; Set @Size=@Size+1 ;Endprint @end_dateprint @temp2print @temp1print @start_dateprint @Size GO--第四步:執行 --執行該預存程序,得到2005-07-22開始三天內的所有通過濟南北的車輛資料,格式“23,3,6,3,.....”EXEC mysp_para