根据用户自定义需求报表。只有在SQL写好存储过程,然后把结果集显示在GridView中。
报表做出来,用户接收了。有把这个效果分享给一些网友,结果网友都会问回一个问题,这个效果如何实现的。
现在把一部分存储过程代码帖出来,分享一下,其实很简单。
代码
--
如果抽检数大于零和比率大于等于零
IF (( @RCount > 0 ) AND ( ISNULL ( @Rate , 0 ) >= 0 ))
BEGIN
BEGIN
-- 定义一个字段变量
DECLARE @ColumnName NVARCHAR ( 100 )
-- 把日期转换为字符串赋值于这个字段变量,如20101202
SET @ColumnName = CONVERT ( NVARCHAR ( 100 ), @BeginDate , 112 )
-- 判断表是否存在这个字段,如果没有向这个临时表添加一个
EXECUTE ( ' IF NOT EXISTS(SELECT name FROM tempdb..syscolumns where id=OBJECT_ID( '' tempdb..#TempFqaVisualReportsByDate '' ) AND tempdb..syscolumns.name = ''' + @ColumnName + ''' ) ALTER TABLE #TempFqaVisualReportsByDate ADD [ ' + @ColumnName + ' ] NVARCHAR(100) ' )
END
BEGIN
-- 判断是否有此品种记录存在
IF NOT EXISTS ( SELECT * FROM #TempFqaVisualReportsByDate WHERE [ 品种 ] = @SpeciesName )
-- 如果没有,添加一笔
INSERT INTO #TempFqaVisualReportsByDate( [ 品种 ] ) VALUES ( @SpeciesName )
-- 如果已经存在,执行更新SQL语句。值是一个组全成的字符串,如110÷247=44.53%
EXECUTE ( ' UPDATE #TempFqaVisualReportsByDate SET [ ' + @ColumnName + ' ] = CONVERT(NVARCHAR(50), ' + @PassedCount + ' ) + '' ÷ '' + CONVERT(NVARCHAR(50), ' + @RCount + ' ) + '' = '' + CONVERT(NVARCHAR(80),CONVERT(DECIMAL(18,2), ' + @Rate + ' * 100)) + '' % '' WHERE [品种] = ''' + @SpeciesName + '''' )
END
END
IF (( @RCount > 0 ) AND ( ISNULL ( @Rate , 0 ) >= 0 ))
BEGIN
BEGIN
-- 定义一个字段变量
DECLARE @ColumnName NVARCHAR ( 100 )
-- 把日期转换为字符串赋值于这个字段变量,如20101202
SET @ColumnName = CONVERT ( NVARCHAR ( 100 ), @BeginDate , 112 )
-- 判断表是否存在这个字段,如果没有向这个临时表添加一个
EXECUTE ( ' IF NOT EXISTS(SELECT name FROM tempdb..syscolumns where id=OBJECT_ID( '' tempdb..#TempFqaVisualReportsByDate '' ) AND tempdb..syscolumns.name = ''' + @ColumnName + ''' ) ALTER TABLE #TempFqaVisualReportsByDate ADD [ ' + @ColumnName + ' ] NVARCHAR(100) ' )
END
BEGIN
-- 判断是否有此品种记录存在
IF NOT EXISTS ( SELECT * FROM #TempFqaVisualReportsByDate WHERE [ 品种 ] = @SpeciesName )
-- 如果没有,添加一笔
INSERT INTO #TempFqaVisualReportsByDate( [ 品种 ] ) VALUES ( @SpeciesName )
-- 如果已经存在,执行更新SQL语句。值是一个组全成的字符串,如110÷247=44.53%
EXECUTE ( ' UPDATE #TempFqaVisualReportsByDate SET [ ' + @ColumnName + ' ] = CONVERT(NVARCHAR(50), ' + @PassedCount + ' ) + '' ÷ '' + CONVERT(NVARCHAR(50), ' + @RCount + ' ) + '' = '' + CONVERT(NVARCHAR(80),CONVERT(DECIMAL(18,2), ' + @Rate + ' * 100)) + '' % '' WHERE [品种] = ''' + @SpeciesName + '''' )
END
END