Попробуйте:
DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
,@DynamicPIVOTColumns NVARCHAR(MAX);
SET @DynamicPIVOTColumns = STUFF
(
(
SELECT ',[' + CAST([FB_DATE] AS VARCHAR(12)) + ']'
FROM #FINAL_STACK
GROUP BY [FB_DATE]
ORDER BY [FB_DATE]
FOR XML PATH('') ,TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,1
,''
);
SET @DynammicTSQLStatement = N'
SELECT *
FROM
(
SELECT *
,ROW_NUMBER() OVER (PARTITION BY FB_DATE ORDER BY (SELECT 1)) AS RID
FROM #FINAL_STACK
) DS
PIVOT
(
MAX([FB_DESC]) FOR [FB_DATE] IN (' + @DynamicPIVOTColumns + ')
) PVT';
EXEC sp_executesql @DynammicTSQLStatement;
![enter image description here](https://i.stack.imgur.com/6aoNz.png)
Нам необходимо выполнить динамический разворот, чтобы быть уверенным, что он всегда будет работать в разные дни.Также обратите внимание, что мы создаем столбец идентификатора строки, используя ROW_NUMBER
, чтобы обеспечить отображение всех записей на определенную дату.В противном случае вы получите только одно значение (например, минимальное или максимальное) в зависимости от агрегатной функции PIVOT
.