統計表中的數量........如下表:
分別統計在某一天的時間裏,,,超長、超寬、超高、超重的數量。
要實現的效果如下圖:
存儲過程如下:
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 裏的變量。所以要使用期轉義字符