Madhivanan was correct. Here's a way to do it in 2005Create table #Test(BatchID int ,Status int)insert into #test select 1001 ,1insert into #test select 1001 ,2insert into #test select 1002 ,0insert into #test select 1002 ,3insert into #test select 1002 ,4insert into #test select 1003 ,4insert into #test select 1004 ,4declare @Status varchar(50)set @status = ''Select @Status = @Status + '[' + convert(varchar(2),a.status )+ '],' from (Select distinct a.Status from #Test a) aSET @Status = LEFT(@Status, LEN(@Status) - 1)exec('SELECT * FROM #test p PIVOT( count(Status) for status in (' + @Status + ')) AS pvt ORDER BY BatchId')drop table #test