1. 程式人生 > >一個存儲過程實例,慢慢再加註釋吧!僅供自己學習

一個存儲過程實例,慢慢再加註釋吧!僅供自己學習

not in order datetime time 不顯示 top varchar union ide

 1 USE [rfiddbHFKT]
 2 GO
 3 /****** Object:  StoredProcedure [dbo].[ppque_tu]    Script Date: 07/21/2017 23:36:40 ******/
 4 SET ANSI_NULLS OFF
 5 GO
 6 SET QUOTED_IDENTIFIER OFF
 7 GO
 8 ALTER PROCEDURE [dbo].[ppque_tu]              
 9 (            
10   @fdatebegin  varchar(50),  ---開始日期            
11   @fdateend
varchar(50), ---結束日期 12 @linename varchar(50), ---生產線 13 @zhandian varchar(50), ----站點 14 @banci varchar(50), ---班次 15 @strnum varchar(5) ----數量 默認數量是10 16 ) 17 AS 18 declare @sqltext
varchar(1500) 19 declare @fcount int 20 declare @sumTotal int 21 ---缺陷餅圖 22 23 --生成臨時表 24 create table #que_cx( 25 class_name nvarchar(200), 26 sernsum int, 27 rate decimal
(18,2)) 28 29 --統計數據 添加查詢條件 30 insert into #que_cx(class_name,sernsum) 31 select c.class_name, count(c.class_name) as sernsum 32 from tjianyan a,tsaomiao b, z_que_class c 33 where a.sern = b.sern and a.zd_bh = b.zd_bh and a.que_class = c.class_id 34 and a.ddate between convert(datetime,@fdatebegin,120) 35 and convert(datetime,@fdateend,120) 36 and(case when @linename=‘‘ then 1 else CHARINDEX(@linename,b.linename) end)>0 37 and a.zd_bh like %+@zhandian+% 38 and(case when @banci=‘‘ then 1 else CHARINDEX(@banci,a.bc_id) end)>0 39 group by c.class_name order by sernsum desc 40 41 --如果小於設置數量 不顯示其余項 42 select @sumTotal=sum(sernsum) from #que_cx 43 select @fcount = count(*) from #que_cx 44 update #que_cx set rate=sernsum*1.00/@sumTotal * 100 45 46 if @fcount>@strnum 47 set @sqltext = select top + @strnum + class_name,‘‘a‘‘ as aa,sernsum,rate from #que_cx 48 + union 49 + select ‘‘其余項‘‘ as class_name ,‘‘b‘‘ as aa, isnull(sum(sernsum),0) as sernsum,sum(rate) from #que_cx 50 + where class_name not in ( select top + @strnum + class_name from #que_cx ) 51 + order by aa,sernsum desc 52 else 53 set @sqltext = select class_name,‘‘a‘‘ as aa,sernsum,rate from #que_cx 54 + order by aa,sernsum,rate desc 55 56 exec(@sqltext)

一個存儲過程實例,慢慢再加註釋吧!僅供自己學習