2016-09-25 9 views
0

学生の不在を示すピボットテーブルがありますが、実行に問題はありませんが、ピボットの結果はありませんが、値がない場合は表示します。 0ではない。私はgoogledと私はそれらを使用しようといくつかの方法を見つけたが、私はそれを行うことはできません。誰でも私に教えてくれますか? この私のピボットテーブルコード:ピボットテーブルの出力値でNULLを0に置き換える方法

create proc [dbo].[get_st_abs_by_stage] @Stage_ID smallint as CREATE TABLE #SummaryTable ( SName nvarchar(50), CName nvarchar(50), Stage_ID SmallInt, Sum_Abs SmallInt ) delete from #SummaryTable INSERT INTO #SummaryTable(SName, CName, Stage_ID, Sum_Abs) SELECT Student_tbl.SName,Courses_tbl.CName,Stages_tbl.Stage_ID,Sum_Abs from Absence_Summary_tbl inner join Student_tbl on Student_tbl.S_ID = Absence_Summary_tbl.S_ID inner join Stages_tbl on Stages_tbl.Stage_ID = Student_tbl.Stage_ID inner join Courses_tbl on Courses_tbl.C_ID = Absence_Summary_tbl.C_ID where Stages_tbl.Stage_ID = @Stage_ID; DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(CName) from #SummaryTable where Stage_ID = @Stage_ID group by CName order by CName FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT SName,' + @cols + ' from ( select SName, CName, Sum_Abs from #SummaryTable ) x pivot ( sum(Sum_Abs) for CName in (' + @cols + ') ) p ' execute(@query);

答えて

1

あなたはcolsのためISNULLで別の変数を生成することができます。このようなもの

select @cols = STUFF((SELECT ',' + QUOTENAME(CName) 
        from #SummaryTable 
        where Stage_ID = @Stage_ID 
        group by CName 
        order by CName 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
select @isnull_cols = STUFF((SELECT ', isnull(' + QUOTENAME(CName) + ', 0) as ' + QUOTENAME(CName) 
        from #SummaryTable 
        where Stage_ID = @Stage_ID 
        group by CName 
        order by CName 
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'') 
set @query = 'SELECT SName,' + @isnull_cols + ' from 
      (
       select SName, CName, Sum_Abs 
       from #SummaryTable 
      ) x 
      pivot 
      (
       sum(Sum_Abs) 
       for CName in (' + @cols + ') 
      ) p ' 
execute(@query); 
関連する問題