Quantcast
Viewing latest article 1
Browse Latest Browse All 4

Transpose of Result set

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)




Viewing latest article 1
Browse Latest Browse All 4

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>