I have to create a Pivot from the below given sample table -
State Country
------------------------------
ALA Almaty Kazakhstan
AMD Ahmedabad India
AMM Amman Jordan
AMS Amsterdam Netherlands
ATH Athens Greece
AUH Abu Dhabi United Arab Emirates
BAH Manama Bahrain
I am doing this by dynamic sql as i want dynamic columns in pivot. My problem is that I am not able to sort values generated by ROW_NUMBER() in dynamic SQL. The variable @var1 in the below mentioned code is giving output as -
[1],[10],[11],[2],[3],[4],[5],[6],[7],[8],[9]
which is not in sorted order.
declare @myvar nvarchar(max)
declare @var1 nvarchar(max)
declare @new nvarchar(max)
set @var1 = (select stuff((select distinct '],[' + cast(ROW_NUMBER() over ( partition by country order by (select 1)) as varchar(100)) from sheet
for xml path('')),1,2,'') + ']')
select @var1
set @myvar =
'select * from
(select *,ROW_NUMBER() over (partition by country order by (select 1)) as rn
from sheet
)as abc
pivot
(
max([state]) for rn
in (' + @var1 + ')
) as pvt'
set @new = 'select * into ##a from (' + @myvar + ') as t'
exec sp_executesql @new
row_number()in a subquery, then use that value to order by your columns.