ダイナミックSQL PIVOTピボットの複数カラムの問題を解決

793 ワード

ピボットが必要なカラムが多い場合や固定されていない場合は、ダイナミックSQLで問題をうまく解決できます.
 
CREATE PROCEDURE [dbo].[usp_getErrWeightReportReceiver]
AS

BEGIN
 
    DECLARE @PLANTS VARCHAR(500)=''
	DECLARE @SQL NVARCHAR(1000)

    SELECT @PLANTS = @PLANTS + '[' + VALUE + '],'
    FROM (SELECT DISTINCT VALUE FROM [dbo].[errWeightMail] WHERE ID='FSL_MAILTO' AND VALUE='QQ20') T
    SET @PLANTS= LEFT(@PLANTS, LEN(@PLANTS)-1)
 
    SET @SQL=
    'WITH A AS(
		SELECT ID,VALUE,VALUE PLANT,VALUE3 FROM [dbo].[errWeightMail] WHERE ID=''FSL_MAILTO'' AND VALUE=''QQ20''
	)
	SELECT PLANT,{0} FROM A 
	PIVOT(MIN(VALUE3) FOR VALUE IN({0}))T'
    SET @SQL= REPLACE(@SQL,'{0}',@PLANTS)
    EXEC sp_executesql @SQL
 
END