add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE #tempIE (AGGREGATIONNAME varchar(2),
LTD decimal,
BOY decimal,
MONTH int);

INSERT INTO #tempIE
VALUES ('XX', 50, 45, 00),
('XX', 150, 145, 01),
('XX', 300, 295, 02),
('YY', 25, 20, 00),
('YY', 50, 45, 01),
('YY', 75, 70, 02),
('ZZ', 500, 495, 00),
('ZZ', 600, 595, 01),
('ZZ', 700, 695, 02);
9 rows affected
SELECT IE.[MONTH],
MAX(CASE IE.AGGREGATIONNAME WHEN 'XX' THEN IE.LTD END) AS XX_LTD,
MAX(CASE IE.AGGREGATIONNAME WHEN 'YY' THEN IE.LTD END) AS YY_LTD,
/* ... */
MAX(CASE IE.AGGREGATIONNAME WHEN 'ZZ' THEN IE.BOY END) AS ZZ_BPY
FROM #tempIE IE
GROUP BY IE.[MONTH];
MONTH XX_LTD YY_LTD ZZ_BPY
0 50 25 495
1 150 50 595
2 300 75 695
Warning: Null value is eliminated by an aggregate or other SET operation.

DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(10);

DECLARE @Delim nvarchar(3) = N',' + @CRLF

SELECT @SQL = N'SELECT IE.[MONTH],' + @CRLF +
STRING_AGG(N' MAX(CASE IE.AGGREGATIONNAME WHEN ' + QUOTENAME(IE.AGGREGATIONNAME,'''') + N' THEN IE.LTD END) AS ' + QUOTENAME(CONCAT(IE.AGGREGATIONNAME,'_LTD')),@Delim) WITHIN GROUP (ORDER BY IE.AGGREGATIONNAME) + N',' + @CRLF +
STRING_AGG(N' MAX(CASE IE.AGGREGATIONNAME WHEN ' + QUOTENAME(IE.AGGREGATIONNAME,'''') + N' THEN IE.BOY END) AS ' + QUOTENAME(CONCAT(IE.AGGREGATIONNAME,'_BOY')),@Delim) WITHIN GROUP (ORDER BY IE.AGGREGATIONNAME) + @CRLF +
N'FROM #tempIE IE' + @CRLF +
N'GROUP BY IE.[MONTH];'
FROM (SELECT DISTINCT AGGREGATIONNAME
FROM #tempIE) IE;

--PRINT @SQL;--Your best friend

EXEC sys.sp_executesql @SQL;
MONTH XX_LTD YY_LTD ZZ_LTD XX_BOY YY_BOY ZZ_BOY
0 50 25 500 45 20 495
1 150 50 600 145 45 595
2 300 75 700 295 70 695
Warning: Null value is eliminated by an aggregate or other SET operation.

DROP TABLE #tempIE;