create proc [dbo].[test1](@TypeGuid varchar(900),@Num int,@StartTime varchar(50),@EndTime varchar(50),@SqlStr varchar(1000))
asbegin
declare @sql as varchar(8000)
set @sql='select top '+cast(@Num as varchar(4))+' 时间,SUM(自助餐) as 自助餐,SUM(西餐)as 西餐,SUM(菜系餐饮) as 菜系餐饮,SUM(火锅香锅) as 火锅香锅,SUM(中餐) as 中餐,SUM(小吃快餐) as 小吃快餐,SUM(甜点饮品) as 甜点饮品,SUM(日韩料理)as 日韩料理,SUM(其他餐饮)as 其他餐饮
from (
select b.TraceDateTime as 时间,
SUM(case b.TypeName when ''自助餐'' then b.Num else 0 end) 自助餐,
SUM(case b.TypeName when ''西餐'' then b.Num else 0 end) 西餐,
SUM(case b.TypeName when ''菜系餐饮'' then b.Num else 0 end) 菜系餐饮,
SUM(case b.TypeName when ''火锅香锅'' then b.Num else 0 end) 火锅香锅,
SUM(case b.TypeName when ''中餐'' then b.Num else 0 end) 中餐,
SUM(case b.TypeName when ''小吃快餐'' then b.Num else 0 end) 小吃快餐,
SUM(case b.TypeName when ''甜点饮品'' then b.Num else 0 end) 甜点饮品,
SUM(case b.TypeName when ''日韩料理'' then b.Num else 0 end) 日韩料理,
SUM(case b.TypeName when ''其他餐饮'' then b.Num else 0 end) 其他餐饮
from (select tbNum.TraceDateTime,PortalTypes.TypeName,COUNT(*)as Num from [TocContents].[dbo].[tb_PortalTypes] PortalTypes
left join [TocContents].[dbo].[tb_Portals] Portals on PortalTypes.Guid = Portals.TypeGuid
left join ('+@SqlStr+' ) tbNum on tbNum.BrowsedPortalNo = Portals.PortalNo
where PortalTypes.MenuGuid = '''+@TypeGuid+''' group by tbNum.TraceDateTime,PortalTypes.TypeName having count(*)>=1)b
where b.TraceDateTime is not null and b.TraceDateTime between '''+@StartTime+''' and '''+@EndTime+''' group by b.TypeName,b.TraceDateTime
)eee group by eee.时间 order by eee.时间 asc'
exec(@sql)
end
蓝色部分就是整数的转换方式,依次方式转换后即可