As I mentioned earlier, PIVOT, in my earlier post, where we have reviewed the PIVOT with static columns. In practical world, we may need to have dynamic columns that needs to be displayed as below:
As Mentioned in Image, Here, dates are dynamic, based on Order Date, 10/25,10/26,10/27,10/28 etc..To achieve the same with Dynamic columns please find query for the same:
CREATE TABLE #TestTable(ctrl_no INT, id int, Amount NUMERIC(18,2), OrderDate DATE) INSERT INTO #TestTable(ctrl_no , id , Amount , OrderDate ) SELECT 1000029,100016,990.0000,'10/25/2012' UNION ALL SELECT 1000029,100018,990.0000,'10/25/2012' UNION ALL SELECT 1000029,100016,660.0000,'10/26/2012' UNION ALL SELECT 1000029,100018,660.0000,'10/26/2012' UNION ALL SELECT 1000029,206007,660.0000,'10/26/2012' UNION ALL SELECT 1000029,206007,660.0000,'10/27/2012' DECLARE @MinDate DATE ,@MaxDate DATE DECLARE @Dates VARCHAR(MAX) SELECT @Dates = '' SELECT @MinDate = MIN(OrderDate) ,@MaxDate = MAX(OrderDate) FROM #TestTable WHILE @MinDate <= @MaxDate BEGIN SELECT @Dates = @Dates + '[' + CONVERT(VARCHAR(10), @MinDate, 101) + '],' SELECT @MinDate = DATEADD(d, 1, @MinDate) END SELECT @Dates = LEFT(@Dates, LEN(@Dates) - 1) DECLARE @qry NVARCHAR(MAX) SELECT @qry = N' SELECT id, ' + @Dates + ' FROM ( SELECT id, ISNULL(Amount,0) AS Amount, OrderDate FROM #TestTable t ) x PIVOT( SUM(Amount) FOR OrderDate IN(' + @Dates + ') ) p ' EXEC (@qry) DROP TABLE #TestTable
Let me know if you have any question/comment.
Reference : Tejas Shah http://www.SQLYoga.com
No comments:
Post a Comment