IF object_id('tempdb..#testEnvironment') IS NOT NULLBEGIN DROP TABLE #testEnvironment;END;SELECT CAST(dtDate AS DATETIME) AS dtDate, sDocIdPrefix, CNTINTO #testEnvironmentFROM (SELECT '2013-02-11', 653, 3683 UNION ALL SELECT '2013-02-11', 649, 1334 UNION ALL SELECT '2013-02-12', 647, 1422 UNION ALL SELECT '2013-02-12', 649, 6602 UNION ALL SELECT '2013-02-12', 653, 4781 )a(dtDate,sDocIdPrefix,CNT);
dtDate sDocIdPrefix CNT----------------------- ------------ -----------2013-02-11 00:00:00.000 653 36832013-02-11 00:00:00.000 649 13342013-02-12 00:00:00.000 647 14222013-02-12 00:00:00.000 649 66022013-02-12 00:00:00.000 653 4781
DECLARE @SQL NVARCHAR(MAX);SELECT @SQL = 'SELECT dtDate,' + sqlCode + CHAR(13) + CHAR(10) + 'FROM #testEnvironment'+CHAR(13)+CHAR(10)+'GROUP BY dtDate;'FROM (SELECT STUFF((SELECT ',' + CHAR(13)+CHAR(10)+ 'MAX(CASE WHEN sDocIdPrefix = ' + CAST(sDocIdPrefix AS VARCHAR(20)) + ' THEN CNT ELSE 0 END) AS '+ QUOTENAME(CAST(sDocIdPrefix AS VARCHAR(20))) FROM (SELECT DISTINCT sDocIdPrefix FROM #testEnvironment )a ORDER BY sDocIdPrefix DESC FOR XML PATH(''),TYPE ).value('.','VARCHAR(MAX)'),1,1,'') )dynSql(sqlCode)EXECUTE sp_executesql @SQL;
dtDate 653 649 647----------------------- ----------- ----------- -----------2013-02-11 00:00:00.000 3683 1334 02013-02-12 00:00:00.000 4781 6602 1422