创建了个存储过程
create proc A @start date,@end date,@unti nvarchar(20) as
declare @3 varchar(8000)
set @3='select convert(varchar(10),EndTime,120)as 日期'
select @3=@3+',sum(case MaterialCode when '''+MaterialCode+''' then ActualQuality else 0 end)['+MaterialCode+']'
from (select distinct top 100 MaterialCode from PR_Batch order by MaterialCode)a
set @3=@3+' from PR_Batch where (convert(varchar(20),EndTime,120) between '''+convert(varchar(20),@start ,120)+''' and '''+convert(varchar(20),@ende,120)+'''or ('''+convert(varchar(20),@start,120)+'''=''''and '''+convert(varchar(20),@end,120)+'''='''' ) and (unti like ''%''+'''+@unti+'''+''%'' or '''+@unti+'''=''''))'
set @3=@3+' group by convert(varchar(10),EndTime,120) order by 日期'
print(@3)
exec(@3)
存储过程能实行,但是运行后的结果不正确,就是@unti变量不管输入何值数据都一样,是哪里写错了么,print的结果
select convert(varchar(10),EndTime,120)as 日期,sum(case MaterialCode when '1#砂' then ActualQuality else 0 end)[1#砂],sum(case MaterialCode when '1#石' then ActualQuality else 0 end)[1#石 from PR_Batch where (convert(varchar(20),EndTime,120) between '2014-09-01' and '2014-09-02'or ('2014-09-01'=''and '2014-09-02'='' ) and (unti like '%'+'1#'+'%' or '1#'='')) group by convert(varchar(10),EndTime,120) order by 日期
------解决思路----------------------
select
convert(varchar(10),EndTime,120)as 日期,
sum(case MaterialCode when '1#砂' then ActualQuality else 0 end)[1#砂],
sum(case MaterialCode when '1#石' then ActualQuality else 0 end)[1#石]
from
PR_Batch where (convert(varchar(20),EndTime,120) between '2014-09-01' and '2014-09-02'or ('2014-09-01'=''and '2014-09-02'='' ) and (unti like '%'+'1#'+'%' or '1#'=''))
group by
convert(varchar(10),EndTime,120) order by 日期
把红色这一段的逻辑顺序搞清楚 应该就是这里的逻辑问题
该加()限制顺序的时候还是要加上比较好
------解决思路----------------------
create proc A @start date,@end date,@unti nvarchar(20) as
declare @3 varchar(8000)
set @3='select convert(varchar(10),EndTime,120)as 日期'
select @3=@3+',sum(case MaterialCode when '''+MaterialCode+''' then ActualQuality else 0 end)['+MaterialCode+']'
from (select distinct top 100 MaterialCode from PR_Batch order by MaterialCode)a
set @3=@3+' from PR_Batch where (convert(varchar(20),EndTime,120) between '''+convert(varchar(20),@start ,120)+''' and '''+convert(varchar(20),@ende,120)+'''or ('''+convert(varchar(20),@start,120)+'''=''''and '''+convert(varchar(20),@end,120)+'''='''' )) and (unti like ''%''+'''+@unti+'''+''%'' or '''+@unti+'''='''')'
set @3=@3+' group by convert(varchar(10),EndTime,120) order by 日期'
print(@3)
exec(@3)
我挪了下一个右括号的位置,你看下~~