У меня есть запрос, который просматривает динамический список столбцов (то есть столбцы могут измениться в любое время) и поворачивает данные, показывая максимальную установленную дату для этих столбцов.Мой вопрос, однако, как мне пройти через более чем одну агрегацию?Мне нужно иметь Max LocationCode, MakeCode и ModelCode для каждого PlaceRef, но я изо всех сил пытаюсь это сделать.Большое спасибо заранее.
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Component )
FROM (SELECT p.Component FROM VwLocationComponentCurrent AS p
INNER JOIN VwLocationListEntriesCurrent AS o ON p.PlaceRef = o.PlaceRef
where o.LocationList = N'NEWBUILD'
GROUP BY p.Component) AS x;
SET @sql = N'
SELECT PlaceRef, Address1, StreetName, PostCode, Substatus, BuildingType, BuildDate, ' + STUFF(@columns , 1, 2, '') + '
FROM
(
SELECT
vwLocationCurrent.PlaceRef
,vwLocationCurrent.BuildDate
,vwLocationCurrent.SubStatus
,vwLocationCurrent.StreetName
,vwLocationCurrent.Address1
,vwLocationCurrent.Address2
,vwLocationCurrent.Address3
,vwLocationCurrent.PostCode
,VwLocationComponentCurrent.Component
,VwLocationComponentCurrent.SubLocationCode
,VwLocationComponentCurrent.InstalledDate
,VwLocationComponentCurrent.MakeCode
,VwLocationComponentCurrent.ModelCode
,VwLocationListEntriesCurrent.LocationList
,vwLocationCurrent.BuildingType
FROM
vwLocationCurrent
INNER JOIN VwLocationListEntriesCurrent
ON vwLocationCurrent.PlaceRef = VwLocationListEntriesCurrent.PlaceRef
LEFT OUTER JOIN VwLocationComponentCurrent
ON vwLocationCurrent.PlaceRef = VwLocationComponentCurrent.PlaceRef
WHERE
VwLocationListEntriesCurrent.LocationList = ''NEWBUILD''
) AS j
PIVOT
(
MAX(InstalledDate) FOR Component IN ('
+ STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
+ ')
) AS p;'
;
PRINT @sql;
EXEC sp_executesql @sql;