Hi,
One more way to do this in t-sql, this also use PIVOT. PIVOT syntax looks looks complex when you first start with it, but its a good way of doing cross tab queries..
declare @PivotColumnNames nvarchar(max) declare @dynamicSQL nvarchar(max) declare @rows int select @rows = count(*) from customer ; with l0 as(select 1 as c union all select 1) , l1 as(select 1 as c from l0 as a, l0 as b) , l2 as (select 1 as c from l1 as a, l1 as b) , l3 as (select 1 as c from l2 as a, l2 as b) , l4 as (select 1 as c from l3 as a, l3 as b) , l5 as(select 1 as c from l4 as a, l4 as b) , nums as(select row_number() over(order by c) as n from l5) , PivotColumnNames as ( select 'r' + cast(n as nvarchar(10)) as rn from nums where n <= @rows ) select @PivotColumnNames = coalesce( @PivotColumnNames+',','') + quotename(rn,']') from PivotColumnNames select @dynamicSQL = 'select * from ( select a.* from Customer c cross apply ( select ''r''+ cast(ID as nvarchar(100)) ,''name'',name union all select ''r''+ cast(ID as nvarchar(100)),''class'',class union all select ''r''+ cast(ID as nvarchar(100)),''ID'',cast(ID as nvarchar(100)) union all select ''r''+ cast(ID as nvarchar(100)),''Product'',Product ) a(id1,ColumnName,value) ) m pivot ( min(value) for id1 in ( '+ @PivotColumnNames + ') ) p ' exec (@dynamicSQL)
But, this method has a problem when row count increases..
Now, even you want to use column group, you need column in some form to create column group on it, you can use below query as dataset
select a.* from Customer c cross apply ( select 'c'+ cast(ID as nvarchar(100)) ,'name',name union all select 'c'+ cast(ID as nvarchar(100)),'class',class union all select 'c'+ cast(ID as nvarchar(100)),'ID',cast(ID as nvarchar(100)) union all select 'c'+ cast(ID as nvarchar(100)),'Product',Product ) a(id1,ColumnName,value)
Now, In report
1. Create column group on ID1
2. Create Row Group on ColumnName
3. Put Value in designer
4. Delete the details group (just delete group only)..
- Chintak (My Blog)