存储过程分割字符串查询

create proc [dbo].[Proc_RS_VRDPAC_MRC1_SelectPassCountByYearMonthtest]     
  @month varchar(100)      
  as
declare @m as int, @sql as nvarchar(1000),@n as int ,@id as nvarchar(100),@id1 as nvarchar(100),@num as int  
set @m = CHARINDEX (',',@month)
set @n = 0
set @num=0
set @sql='select  month(dbo.fn_PrimeObjects_GetLocalTime(a.ExamingOn)) as months,b.BU,    
sum(CONVERT(decimal(18, 0), a.IsPassed)) as pasman,   
count(distinct a.stuid) -sum(CONVERT(decimal(18, 0), a.IsPassed)) as nopas   
from VK_RDPAC_MRC1_Record as a    
join Employee as b    
on  a.stuid=b.FID    
where BU is not null  and bu is not null and b.ProduceLine is not null'
WHILE  @m>0 
 BEGIN 
        set  @id=substring(@month,@n,@m-@n) 
        set  @n=@m+1 
        set  @m=CHARINDEX(',',@month,@n)
        print @m
        if @num=0
        begin
           if @m=0
           begin
                set @sql=@sql+' and CONVERT(varchar(7),a.ExamingOn,120) in ('''+@id+''')'
           end
           else
           begin
                set @sql=@sql+' and (CONVERT(varchar(7),a.ExamingOn,120) in ('''+@id+''')'
           end
        end
        else
        begin
           if @m=0
           begin
                set @sql=@sql+' or CONVERT(varchar(7),a.ExamingOn,120) in ('''+@id+'''))'
           end
           else
           begin
                set @sql=@sql+' or (CONVERT(varchar(7),a.ExamingOn,120) in ('''+@id+''')'
           end
        end
        set @num=@num+1
 END
 set @sql=@sql+' group by  month(dbo.fn_PrimeObjects_GetLocalTime(a.ExamingOn)),b.BU order by b.BU'
exec sp_executesql @sql

 

posted @ 2014-05-30 14:10  蔡云云  阅读(1330)  评论(0)    收藏  举报