有一个存储过程是统计司机节油的。分部分和副司机查询 4中情况,还有司机担当副司机的查询,2种情况。一个6种情况
每种情况都类似,考虑另外封装存储过程来简化。
ALTER PROCEDURE [dbo].[driverSaveOilSub]
-- Add the parameters for the stored procedure here
@startdate datetime,
@enddate datetime,
@department varchar(5),
@driverDoAsistant bit =0 --司机担当副司机,默认司机不到担当。传入其他值的时候,是担当的情况
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;----下马
select DriverGh, 0.5* sum(dzCount+dxCount+dcCount)+sum(score) as driverValue,
count( distinct tb_driverReportInput.submitDate) as driverReportCount,
CAST(sum(tb_driverReportDetails.comprehensiveOil) as decimal(18,2))as comprehensiveOil
from tb_driverReportDetails left join tb_driverReportInput on tb_driverReportInput.id=tb_driverReportDetails.reportid
left join tb_stationMileage on tb_stationMileage.id=mileageStationId
where (select department from tb_driver where tb_driver.gh=(CASE when @driverDoAsistant=0 then DriverGh else assistantDriverGh end) and post='司机')=@department
and fromDateTime>=@startdate and fromDateTime<=@enddate group by DriverGh
END
------------下面是整个存储过程
先创建一些临时表,临时标的类型和 名称要起好。
然后调用子存储过程向临时表填充数据。用这个表就没问题。最后临时表的删除代码没贴上。
还有很多重复的。用sql 拼接?还没试。
ALTER PROCEDURE [dbo].[driverSaveOil] -- Add the parameters for the stored procedure here @startdate datetime, @enddate datetime AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; --set @startdate=dateadd(hour,18,@startdate) --set @enddate=dateadd(hour,18,@enddate) -- Insert statements for procedure here if OBJECT_ID('tempdb..tianjiDriver') is not null drop table #tianjiDriver if OBJECT_ID('tempdb..xieqiaoDriver') is not null drop table #xieqiaoDriver if OBJECT_ID('tempdb..tianjiAssistant') is not null drop table #tianjiAssistant if OBJECT_ID('tempdb..xieqiaoAssistant') is not null drop table #xieqiaoAssistant if OBJECT_ID('tempdb..xieqiaoDriverDoAsistant') is not null drop table #xieqiaoDriverDoAsistant if OBJECT_ID('tempdb..tianjiDriverDoAsistant') is not null drop table #tianjiDriverDoAsistant CREATE TABLE [dbo].[#tianjiDriver]( [DriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) CREATE TABLE [dbo].[#xieqiaoDriver]( [DriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) -- CREATE TABLE [dbo].[#tianjiDriverDoAsistant]( [DriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) CREATE TABLE [dbo].[#xieqiaoDriverDoAsistant]( [DriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) -- CREATE TABLE [dbo].[#tianjiAssistant]( [assistantDriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) CREATE TABLE #xieqiaoAssistant( [assistantDriverGh] [nvarchar](20), [driverValue] float, [driverReportCount] int, [comprehensiveOil] decimal(18,2) NULL ) INSERT #tianjiDriver EXEC [dbo].[driverSaveOilSub] @startdate,@enddate,'田集' INSERT #tianjiAssistant EXEC [dbo].[driverSaveOilSubAsistant] @startdate,@enddate,'田集' INSERT #xieqiaoDriver EXEC [dbo].[driverSaveOilSub] @startdate,@enddate,'谢桥' INSERT #xieqiaoAssistant EXEC [dbo].[driverSaveOilSubAsistant] @startdate,@enddate,'谢桥' INSERT #tianjiDriverDoAsistant EXEC [dbo].[driverSaveOilSub] @startdate,@enddate,'田集',1 INSERT #xieqiaoDriverDoAsistant EXEC [dbo].[driverSaveOilSub] @startdate,@enddate,'谢桥',1 select (select gh from tb_driver where gh=DriverGh) as gh, (select drivername from tb_driver where gh=DriverGh) as name, (select department from tb_driver where gh=DriverGh) as department, (select post from tb_driver where gh=DriverGh) as post, '司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=b.DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2)) as actualOil, CAST(b.comprehensiveOil -(select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=b.DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2)) as saveOil, * from #tianjiDriver b union all select (select gh from tb_driver where gh=assistantDriverGh) as gh, (select drivername from tb_driver where gh=assistantDriverGh) as name, (select department from tb_driver where gh=assistantDriverGh) as department, (select post from tb_driver where gh=assistantDriverGh) as post, '副司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.assistantDriverGh=assistantDriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate)as decimal(18,2))as actualOil, CAST(comprehensiveOil -(select sum(actualOil) from tb_driverReportInput nb where nb.assistantDriverGh=assistantDriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as saveOil, * from [#tianjiAssistant] union all select (select gh from tb_driver where gh=DriverGh) as gh, (select drivername from tb_driver where gh=DriverGh) as name, (select department from tb_driver where gh=DriverGh) as department, (select post from tb_driver where gh=DriverGh) as post, '司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as actualOil, CAST(comprehensiveOil- (select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as saveOil, * from [#xieqiaoDriver] union all select (select gh from tb_driver where gh=assistantDriverGh) as gh, (select drivername from tb_driver where gh=assistantDriverGh) as name, (select department from tb_driver where gh=assistantDriverGh) as department, (select post from tb_driver where gh=assistantDriverGh) as post, '副司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.assistantDriverGh=assistantDriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as actualOil, CAST(comprehensiveOil-(select sum(actualOil) from tb_driverReportInput nb where nb.assistantDriverGh=assistantDriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as saveOil, * from [#xieqiaoAssistant] ------------------------- union all select (select gh from tb_driver where gh=DriverGh) as gh, (select drivername from tb_driver where gh=DriverGh) as name, (select department from tb_driver where gh=DriverGh) as department, (select post from tb_driver where gh=DriverGh) as post, '副司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as actualOil, CAST(comprehensiveOil-(select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as saveOil, * from #tianjiDriverDoAsistant union all select (select gh from tb_driver where gh=DriverGh) as gh, (select drivername from tb_driver where gh=DriverGh) as name, (select department from tb_driver where gh=DriverGh) as department, (select post from tb_driver where gh=DriverGh) as post, '副司机' as workpost, CAST((select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as actualOil, CAST(comprehensiveOil-(select sum(actualOil) from tb_driverReportInput nb where nb.DriverGh=DriverGh and fromDateTime>=@startdate and fromDateTime<=@enddate) as decimal(18,2))as saveOil, * from #xieqiaoDriverDoAsistant END