存儲過程..臨時表..統計數量

統計表中的數量........如下表:

分別統計在某一天的時間裏,,,超長、超寬、超高、超重的數量。

要實現的效果如下圖:

存儲過程如下:

alter proc CX
(
 @FStartDateTime varchar(100),
 @FEndDateTime varchar(100),
 @FVString varchar(7000)
)
as
set nocount on 
----使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。

declare @sql varchar (1000)
create table #aa  ----創建臨時表..
(
 fcount int,
 fperformdate datetime
)

create table #bb
(
 fcount int,
 fperformdate datetime
)

create table #cc
(
 fcount int,
 fperformdate datetime
)

create table #dd
(
 fcount int,
 fperformdate datetime
)

set @sql='insert #aa select count(*) as ' + '''超長''' + ',FPerformDate from bill_road where isnull(foverlong,0)>0 and '
 + 'FPerformDate between convert(varchar(10),'+ @FStartDateTime + ',120) and convert(varchar(10), ' +  @FEndDateTime + ',120)'
 + ' and FStationNo in (select FNumberCode from B_Information where FNodeKey in (' + @FVString + ')) group by FPerformDate'
print @sql ----打印語句
exec (@sql)
----執行語句


set @sql='insert #bb select count(*) as ' + '''超寬''' + ',FPerformDate from bill_road where isnull(foverwidth,0)>0 and '
 + 'FPerformDate between convert(varchar(10),'+ @FStartDateTime + ',120) and convert(varchar(10), ' +  @FEndDateTime + ',120)'
 + ' and FStationNo in (select FNumberCode from B_Information where FNodeKey in (' + @FVString + ')) group by FPerformDate'
print @sql
exec (@sql)


set @sql='insert #cc select count(*) as ' + '''超高''' + ',FPerformDate from bill_road where isnull(foverhigh,0)>0 and '
 + 'FPerformDate between convert(varchar(10),'+ @FStartDateTime + ',120) and convert(varchar(10), ' +  @FEndDateTime + ',120)'
 + ' and FStationNo in (select FNumberCode from B_Information where FNodeKey in (' + @FVString + ')) group by FPerformDate'
print @sql
exec (@sql)

set @sql='insert #dd select count(*) as ' + '''超重''' + ',FPerformDate from bill_road where isnull(fALLoverweight,0)>0 and '
 + 'FPerformDate between convert(varchar(10),'+ @FStartDateTime + ',120) and convert(varchar(10), ' +  @FEndDateTime + ',120)'
 + ' and FStationNo in (select FNumberCode from B_Information where FNodeKey in (' + @FVString + ')) group by FPerformDate'
print @sql
exec (@sql)

set nocount off
select isnull(a.fcount,0) as '超長',isnull(b.fcount,0) as '超寬',isnull(c.fcount,0) as '超高',isnull(d.fcount,0) as '超重',
      convert(varchar(10),a.FPerformDate,120) as 時間
 --datepart(month,a.FPerformDate) as 時間
from #aa a
left outer join #bb b on a.FPerformDate = b.FPerformDate
left outer join #cc c on a.FPerformDate = c.FPerformDate
left outer join #dd d on a.FPerformDate = d.FPerformDate
go

exec CX '''2005-5-1''','''2010-1-1''','''f0001'',''f0002'',''f0003'',''f0004'',''f0005'',''f0006'',''f0007'',''f0008'',''f0009'',''f0010'''

這裏使用變量執行單個SQL語句,是因爲在存儲過程中要傳遞 In 裏的變量。所以要使用期轉義字符

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章