数据类型 varchar 和 varchar 在 modulo 运算符中不兼容。
ALTER proc [dbo].[Get_DispatchingList]
(
@Stime datetime,
@Etime datetime,
@Rid int
)
as
begin
declare @strsql varchar(8000)
set @strsql ='dbo.F_FindParentDeptNameByRepositoryId(r.id) as RepositoryName, isnull(d.Num,0) as OutNmu, isnull(c.Num,0)as inNum,
isnull(e.num,0) as Days,convert(varchar(50), case when a.num is null then 0 else case when b.num is null then 100 else round((isnull(a.num,0)*100)/(isnull(a.num,0)+isnull(b.num,0))*1,0)
end end )+ '%'as AccuracyRate
from RepositoryInfo r left join DispatchingList d1 on d1.outRepId=r.id
left join DispatchingList d2 on d2.inRepId=r.id
left join orderinfo d3 on d1.orderinfoId=d3.id
left outer join (select d4.inrepId,isnull(avg(datediff(day,d3.finishedtime,d4.confirmTime)+1),0) as num
from DispatchingList d4 left join orderinfo d3 on d4.orderinfoId=d3.id where d4.status=2 and d4.confirmTime>=@Stime AND d4.confirmTime<=@Etime group by d4.inrepId) e on r.id=e.inrepId
left outer join (select outrepId,sum(outnum) as num from DispatchingList where status=2 and confirmTime>=@Stime AND confirmTime<=@Etime group by outrepId) d on r.id=d.outrepId
left outer join (select inrepId,sum(outnum) as num from DispatchingList where status=2 and confirmTime>=@Stime AND confirmTime<=@Etime group by inrepId) c on r.id=c.inrepid
left outer join (select inrepId,count(1) as num from DispatchingList where status=2 and confirmTime>=@Stime AND confirmTime<=@Etime group by inrepId) a on r.id=a.inrepid
left outer join (select inrepId,count(1) as num from DispatchingList where status=4 and confirmTime>=@Stime AND confirmTime<=@Etime group by inrepId) b on r.id=b.inrepid
WHERE R.Id=@Rid and d1.confirmTime>=@Stime AND d1.confirmTime<=@Etime or d2.confirmTime>=@Stime AND d2.confirmTime<=@Stime
group by r.id,a.num,b.num,e.num,d.num,c.num order by r.id desc'
exec (@strsql)
end
------解决方案--------------------改为nvarchar类型试试