以下查询使用枢轴将[expireDate Year-Month]字段转换为列,同时根据需要动态创建尽可能多的Year-Month列。
DECLARE @SQLQuery AS NVARCHAR(MAX)
DECLARE @PivotColumns AS NVARCHAR(MAX)
--Get unique values of pivot column
SELECT @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME([expireDate Year-Month])
FROM (SELECT DISTINCT [expireDate Year-Month] FROM REPORTING_DATA.tableau.vw_vehicleInspDetailsHistMonthlyFinal) AS PivotExample
SELECT @PivotColumns
--Create the dynamic query with all the values for
--pivot column at runtime
SET @SQLQuery =
N'SELECT DISTINCT Vehicle#, ' + @PivotColumns + '
FROM REPORTING_DATA.tableau.vw_vehicleInspDetailsHistMonthlyFinal
PIVOT( MAX(inspectionResult)
FOR [expireDate Year-Month] IN (' + @PivotColumns + '))
AS P
ORDER BY Vehicle# '
SELECT @SQLQuery
--Execute dynamic query
EXEC sp_executesql @SQLQuery
问题在于它在单独的行上而不是在一行中输出每个车辆/年月的检查结果,从而为每个车辆/年月组合创建一行。
Same vehicle with inspect result for each year-month lists on separate row
每辆车应排成一行,其所有检查结果都在同一行上。有什么方法可以将每辆车的检查结果合并为一行?