How to get column wise data in SQL Server? -
how column wise data in sql server?
format:
name date ---- ----- xxx 10/15/2015 xxx 12/15/2015 xxx 15/15/2015 yyy 20/15/2015 yyy 25/15/2015 desired output:
name date date date -------------------------------------------- xxx 10/15/2015 12/15/2015 15/15/2015 yyy 20/15/2015 25/15/2015
you can use code example pivot data:
on mysql:
select data.name, if(data.row_number=1,date,null) date1, if(data.row_number=2,date,null) date2, if(data.row_number=3,date,null) date3, if(data.row_number=4,date,null) date4, if(data.row_number=5,date,null) date5 ( select @row_number:=@row_number+1 row_number, name, date yourtable, (select @row_number:=0) t order date ) data group data.name; on sql server:
-- generate demo data create table #yourtable(name nvarchar(20), date date) insert #yourtable(name,date) values(n'xxx',getdate()), (n'xxx', dateadd(day,-1,getdate())), (n'yyy',getdate()), (n'yyy', dateadd(day,1,getdate())) -- part select pvt.* ( select row_number() over(partition name order date) rn, name, date #yourtable ) data pivot( min(date) rn in([1],[2],[3],[4],[5],[6]) ) pvt -- cleanup drop table #yourtable this dynamic pivot adapt if date list grow:
-- generate demo data create table #yourtable(name nvarchar(20), date date) insert #yourtable(name,date) values(n'xxx',getdate()), (n'xxx',dateadd(day,1,getdate())), (n'xxx', dateadd(day,-1,getdate())), (n'yyy',getdate()), (n'yyy', dateadd(day,1,getdate())) declare @sql nvarchar(max), @columnlist nvarchar(max) select @columnlist = coalesce(@columnlist + n',['+convert(nvarchar(max),row_number() over(order date))+']', n'['+convert(nvarchar(max),row_number() over(order date))+']' ) #yourtable name = ( select top (1) name #yourtable group name order count(*) desc ) select @columnlist -- part set @sql = n' select pvt.* ( select row_number() over(partition name order date) rn, name, date #yourtable ) data pivot( min(date) rn in('+@columnlist+') ) pvt' exec(@sql) -- cleanup drop table #yourtable
Comments
Post a Comment