我的透视图的顶部和底部是原始表格
我想要这样的结果 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
答案 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
重新编写了代码,并成功了,谢谢大家!!