1 CREATE PROCEDURE [dbo].[UP_TableEtp] 2 ( 3 @etpYear int=0, 4 @sqlWhere nvarchar(4000)='', 5 @numStart int=0, 6 @numEnd int = 20 7 ) 8 AS 9 10 declare @SQL nvarchar(4000) 11 declare @YearThis int =year(getdate()) 12 SET @SQL = '' 13 if(@etpYear=0) 14 begin 15 set @etpYear=@YearThis 16 end 17 18 SET @SQL = @SQL + ' 19 --存在 20 create table #EtpInTable(EtpYear varchar(10), EtpId int,EtpName varchar(50),Province varchar(50),City varchar(50),IdYear int,Total float) 21 insert into #EtpInTable select * from 22 ( 23 select 24 '+convert(varchar,@etpYear)+' EtpYear,aa.Id EtpId, aa.Name EtpName,aa.Province,aa.City,rr.Id IdYear,rr.Total 25 from table_Etp aa 26 left join table_Rat rr on aa.Id=rr.Eid 27 left join table_Ind ind on ind.Id=aa.IndustryId 28 where rr.Id='+right(@etpYear,2)+' 29 )a 30 31 --不存在 32 create table #EtpNoTable(EtpYear varchar(10), EtpId int,EtpName varchar(50),Province varchar(50),City varchar(50),IdYear int,Total float) 33 insert into #EtpNoTable select * from 34 ( 35 select 36 '+convert(varchar,@etpYear)+' EtpYear,aa.Id EtpId, aa.Name EtpName,aa.Province,aa.City,rr.Id IdYear,rr.Total 37 from table_Etp aa 38 left join #EtpInTable bb on bb.EtpId=aa.Id 39 left join table_Ind ind on ind.Id=aa.IndustryId 40 where aa.Id not in(select EtpId from #EtpInTable) 41 )b 42 43 --合并行 44 create table #EtpList(EtpYear varchar(10), EtpId int,EtpName varchar(50),Province varchar(50),City varchar(50),IdYear int,Total float) 45 insert into #EtpList select * from 46 ( 47 select * from #EtpInTable 48 union 49 select * from #EtpNoTable 50 )c 51 52 --合并行的row_numberID 53 select * from 54 ( 55 select row_number() over (order by EtpId desc) AS Id, 56 yy.Value SumValue, 57 aa.* 58 from #EtpList aa 59 left join table_Year yy on yy.Eid=aa.EtpId and aa.IdYear=yy.Id 60 )m 61 where m.Id between '+convert(varchar,@numStart)+' and '+convert(varchar,@numEnd)+' 62 ' 63 64 IF LEN(@sqlWhere) > 0 65 BEGIN 66 SET @SQL = @SQL + @sqlWhere 67 END 68 69 SET @SQL = @SQL + ' 70 order by IdYear desc 71 DROP TABLE #EtpInTable 72 DROP TABLE #EtpNoTable 73 DROP TABLE #EtpList 74 ' 75 EXEC sp_executesql @SQL