1

動作する動的ピボットを作成しました。

DECLARE 
@AttributeNames as NVARCHAR(MAX), 
@SQL as NVARCHAR(MAX);

DECLARE
@AssetGroup as NVARCHAR(MAX) = 'Water',
@AssetType as NVARCHAR(MAX)= 'Water Meters',
@RecStatus as NVARCHAR(MAX) = 'I';



SET @AttributeNames = STUFF(
(SELECT N',' + QUOTENAME(AttributeName) AS [text()]
  FROM (SELECT DISTINCT G1_ATTRIBUTE_NAME as AttributeName 
        FROM dbo.GASSET_MASTER INNER JOIN
                      dbo.GASSET_ATTRIBUTE ON dbo.GASSET_MASTER.SERV_PROV_CODE = dbo.GASSET_ATTRIBUTE.SERV_PROV_CODE AND 
                      dbo.GASSET_MASTER.G1_ASSET_SEQ_NBR = dbo.GASSET_ATTRIBUTE.G1_ASSET_SEQ_NBR
    --WHERE     (dbo.GASSET_MASTER.G1_ASSET_GROUP = ''' + @AssetGroup + ''') AND (dbo.GASSET_MASTER.G1_ASSET_TYPE = ''' + @AssetType + ''')
    ) AS AttributeName

ORDER BY AttributeName

FOR XML PATH('')),
1,1, N'');



SET @SQL = N'SELECT *
FROM (SELECT     dbo.GASSET_MASTER.G1_ASSET_ID, dbo.GASSET_ATTRIBUTE.G1_ASSET_SEQ_NBR, dbo.GASSET_ATTRIBUTE.G1_ATTRIBUTE_NAME, 
                      dbo.GASSET_ATTRIBUTE.G1_ATTRIBUTE_VALUE, dbo.GASSET_MASTER.G1_ASSET_GROUP, dbo.GASSET_MASTER.G1_ASSET_TYPE, 
                      dbo.GASSET_MASTER.G1_ASSET_STATUS, dbo.GASSET_MASTER.REC_STATUS
        FROM         dbo.GASSET_MASTER LEFT OUTER JOIN
                      dbo.GASSET_ATTRIBUTE ON dbo.GASSET_MASTER.SERV_PROV_CODE = dbo.GASSET_ATTRIBUTE.SERV_PROV_CODE AND 
                      dbo.GASSET_MASTER.G1_ASSET_SEQ_NBR = dbo.GASSET_ATTRIBUTE.G1_ASSET_SEQ_NBR
        WHERE     (dbo.GASSET_MASTER.G1_ASSET_GROUP = ''' + @AssetGroup + ''') AND (dbo.GASSET_MASTER.G1_ASSET_TYPE = ''' + @AssetType + ''') AND (dbo.GASSET_MASTER.REC_STATUS <> ''' + @RecStatus + ''')) as SState

PIVOT (
MAX(G1_ATTRIBUTE_VALUE) 
FOR G1_ATTRIBUTE_NAME IN(' + @AttributeNames + N')) AS P;';


Print @SQL

このコードは、適切にフォーマットされたピボットであると私が信じているものになります。しかし、列を作成するときにコメントアウトされたWHERE句を使用しようとすると、レコードが返されず、エラーも発生しません。

--WHERE     (dbo.GASSET_MASTER.G1_ASSET_GROUP = ''' + @AssetGroup + ''') AND (dbo.GASSET_MASTER.G1_ASSET_TYPE = ''' + @AssetType + ''')

WHERE私はさまざまな方法で条項を変更しようとしましたが、成功しませんでした。これを別の方法で行う方法はありますか?

4

1 に答える 1