Проблема с поворотом столбца при получении повторного идентификатора со столбцами с нулевым значением - PullRequest
0 голосов
/ 17 января 2020

Вверху показан результат моей сводной таблицы, а ниже - исходная таблица

enter image description here

Я хочу получить такой результат, как этот AssetId | 77 | 78 | 79 | 80 | 81 | 82 1571539 | 99 | 01.01.2020 | L460 | Avast Pro | 01/30/2020 | NULL 8323444 | 103 | 01/28/2020 | PhoneI | Avast Pro | Null | NULL

@pAssetTypeId int
as

IF OBJECT_ID('tempdb..##TBL_TEMP') IS NOT NULL
DROP TABLE #TBL_TEMP

DECLARE   @SQLQuery AS NVARCHAR(MAX)

DECLARE   @PivotColumns AS NVARCHAR(MAX)
DECLARE   @AssetId AS Varchar(MAX)

SELECT   @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(fm.FieldMaintenanceId)
FROM dbo.FieldData f
   LEFT JOIN dbo.AssetType a
   ON f.AssetTypeId = a.AssetTypeId
LEFT JOIN dbo.FieldMaintenance fm
   ON f.FieldMaintenanceId = fm.FieldMaintenanceId
   where a.AssetTypeId = @pAssetTypeId

SET   @SQLQuery =
   N'SELECT AssetId,' +   @PivotColumns + '
   INTO #TBL_TEMP
   FROM [dbo].[AssetDetails] a
   PIVOT( MAX([Data])
   FOR [FieldMaintenanceId] IN (' + @PivotColumns + ')) as Q'

EXEC sp_executesql @SQLQuery

Select * from #TBL_TEMP 

1 Ответ

0 голосов
/ 17 января 2020

Нажмите, чтобы увидеть желаемый результат сводной таблицы

IF OBJECT_ID('tempdb..##TBL_TEMP') IS NOT NULL
DROP TABLE ##TBL_TEMP

DECLARE   @SQLQuery AS NVARCHAR(MAX)

DECLARE   @PivotColumns AS NVARCHAR(MAX)
DECLARE   @AssetId AS Varchar(MAX)

SELECT   @PivotColumns= COALESCE(@PivotColumns + ',','') + 
QUOTENAME(fm.FieldMaintenanceId)
FROM CONCEPASSET.dbo.FieldData f
   LEFT JOIN CONCEPASSET.dbo.AssetType a
   ON f.AssetTypeId = a.AssetTypeId
   LEFT JOIN CONCEPASSET.dbo.FieldMaintenance fm
   ON f.FieldMaintenanceId = fm.FieldMaintenanceId
   where a.AssetTypeId = 3

SET @SQLQuery = N'Select * from (Выберите AssetId, AssetTypeId, FieldMaintenanceId, [Данные] из AssetDetails) AS SourceTable PIVOT (MAX ([Данные]) ДЛЯ [FieldMaintenanceId] IN ('+@PivotColumns+')) AS TableTest '

EXEC sp_executesql @SQLQuery

Переработан код, и он работает, спасибо всем !!

...