Нельзя динамически создавать значения кросс-таблицы с помощью SQL Server PIVOT и чистого статического SQL.Вы должны построить SQL динамически, либо с помощью какого-либо внешнего языка сценариев, создающего запрос, или с помощью T-SQL, использующего execute
DECLARE @locationID int, @LocationName nvarchar(50),
@columnList nvarchar(max), @idList nvarchar(max), @sql nvarchar(max) ;
DECLARE location_cursor CURSOR
FOR SELECT locationID, LocationName FROM Locations
SET @columnList = '';
SET @idList = '';
OPEN location_cursor
FETCH NEXT FROM vendor_cursor
INTO @locationID, @LocationName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @columnList = @columnList + ', [' + @locationID + '] as [' + @locationName + ']'
SET @idList = @idList + '[' + @locationID + '],'
END
CLOSE location_cursor
SET @sql = 'select DefectType' + @columnList + ' from (select Defect.DefectID, Defect.DefectType, Location.LocationID from Feedback inner join Locations on (Feedback.LocationID= Location.LocationID)
inner join DefectType on (Feedback.DefectID= Defect.DefectID)
) p pivot
( count (DefectID) for LocationID in (' + left(@idList,len(@idList)-1) + ') ) as pvt order by pvt.DefectType'
EXECUTE (@sql)
Я не проверял это, очевидно, ноон должен работать (возможно, с небольшими изменениями).