2017-07-06 13 views
2

行が正しく動作しているが、問題がNULLである動的列に行をピボットする必要があります。私はZERO(0)を値にしたい。Sql Serverピボットは、NULL値を持つ列に既定の名前の列を使用します

出力のために、この画像を参照してください:

:

は、以下の表で自分のSQLクエリです:

CREATE TABLE #CourseSales 
(Course VARCHAR(50) null,Year INT,Earning MONEY null) 
go 
--Populate Sample records 
INSERT INTO #CourseSales VALUES('.NET',2012,10000) 
INSERT INTO #CourseSales VALUES('.NET',2012,5000) 
INSERT INTO #CourseSales VALUES('Java',2012,20000) 
INSERT INTO #CourseSales VALUES('Java',2013,30000) 
INSERT INTO #CourseSales VALUES(null,2013,1200) 
INSERT INTO #CourseSales VALUES(null,2012,null) 

select * from #CourseSales 

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX), 
     @PivotColumnNames AS NVARCHAR(MAX), 
     @PivotSelectColumnNames AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT @PivotColumnNames= ISNULL(@PivotColumnNames + ',','')+ QUOTENAME(Course) 
FROM (SELECT DISTINCT Course FROM #CourseSales) AS Courses 

--Get distinct values of the PIVOT Column with isnull 
SELECT @PivotSelectColumnNames = ISNULL(@PivotSelectColumnNames + ',','') + 'ISNULL(' + QUOTENAME(Course) + ', 0) AS ' + QUOTENAME(Course) 
FROM (SELECT DISTINCT Course FROM #CourseSales) AS Courses 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery =N'SELECT Year, ' + @PivotSelectColumnNames + ' FROM #CourseSales PIVOT(SUM(Earning) FOR Course IN (' + @PivotColumnNames + ')) AS PVTTable' 

--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 

drop table #CourseSales 

任意の助けいただければ幸いです。ありがとう。

+0

を試すことができますあなたは稼ぐためにいくつかのソース(コース)を持っているか、空気からしなければなりません...! – Rajan

答えて

2

あなたはこの

DECLARE @DynamicPivotQuery AS NVARCHAR(MAX), 
     @PivotColumnNames AS NVARCHAR(MAX), 
     @PivotSelectColumnNames AS NVARCHAR(MAX) 

--Get distinct values of the PIVOT Column 
SELECT @PivotColumnNames= ISNULL(@PivotColumnNames + ',','')+ QUOTENAME(Course) 
FROM (SELECT DISTINCT ISNULL(Course,'ZAny') AS Course FROM #CourseSales) AS Courses 

--Get distinct values of the PIVOT Column with isnull 
SELECT @PivotSelectColumnNames = ISNULL(@PivotSelectColumnNames + ',','') + 'ISNULL(' + QUOTENAME(Course) + ', 0) AS ' + QUOTENAME(Course) 
FROM (SELECT DISTINCT ISNULL(Course,'ZAny') AS Course FROM #CourseSales) AS Courses 

--Prepare the PIVOT query using the dynamic 
SET @DynamicPivotQuery =N'SELECT Year, ' + @PivotSelectColumnNames + ' FROM (SELECT ISNULL(Course,''ZAny'') AS Course,Year,Earning FROM #CourseSales) #CourseSales PIVOT(SUM(Earning) FOR Course IN (' + @PivotColumnNames + ')) AS PVTTable' 

--Execute the Dynamic Pivot Query 
EXEC sp_executesql @DynamicPivotQuery 
+0

ありがとう@TienN。これは期待どおりに動作しています。本当に感謝。再度、感謝します!! – user3044462

+0

こんにちは@TienN、あなたSTUFFを使用してこれを行う方法を教えてくださいできますか? – user3044462

+0

ちょっと@TienN、私はSTUFFを使用して自分自身を試して、それでうまく動作しています。 SELECT @ PivotColumnNames = STUFF(選択した '、' + QUOTENAME(コース) )コースコード FOR XML PATH( '')、TYPE)からASコースを選択します(コース名 'ZAny')。値( '。'、 'NVARCHAR(MAX)')、1,1、 ''); ありがとうございます! – user3044462

関連する問題