Hi,
Please check if this solve your need
DECLARE @SQL NVARCHAR(MAX)
;With MyCTE AS(
-- This is your query inside the CTE
SELECT as_of_date ,CASE WHEN as_of_date = EOMONTH(DATEADD(MONTH, -1, SYSDATETIME())) THEN 'LM' END AS 'Last Month End' ,CASE WHEN as_of_date = EOMONTH(DATEADD(QUARTER, -1, DATEFROMPARTS(YEAR(SYSDATETIME()), (MONTH(SYSDATETIME()) / 4 + 1) * 3, 1))) THEN 'LQ' END AS [Last quarter end] ,CASE WHEN as_of_date = DATEFROMPARTS(YEAR(SYSDATETIME()) - 1, 12, 31) THEN 'LY' END AS [Last year end] FROM #tmpTable
)
SELECT @SQL = 'SELECT ' + CONCAT_WS(',',
'[as_of_date]',
IIF(Max([Last quarter end]) IS NOT NULL,'[Last quarter end]',NULL),
IIF(Max([Last year end]) IS NOT NULL,'[Last year end]',NULL),
IIF(Max([Last Month End]) IS NOT NULL,'[Last Month End]',NULL)
) + ' FROM #Tbl'
FROM #Tbl
EXECUTE sp_executesql @SQL