列枢纽问题得到重复ID与具有空值的枢轴列

时间:2020-01-17 10:01:05

标签: sql-server group-by pivot

我的透视图的顶部和底部是原始表格

enter image description here

我想要这样的结果 AssetId | 77 | 78 | 79 | 80 | 81 | 82 1571539 | 99 | 01/01/2020 | L460 | Avast Pro | 2020年1月30日|空值 8323444 | 103 | 01/28/2020 | PhoneI | Avast Pro |空| 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 :(得分:0)

Click to see desired pivot result

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 * 从 ( 选择 AssetId, AssetTypeId, FieldMaintenanceId, [数据] 来自AssetDetails)AS SourceTable PIVOT(MAX([Data])FOR [FieldMaintenanceId] IN('+ @ PivotColumns +'))AS TableTest'

EXEC sp_executesql @SQLQuery

重新编写了代码,并成功了,谢谢大家!!