I am trying to rotate without aggregation , and work in a bit of wall.
Here is an example of T-SQL I'm trying to work with:
declare @optionalFields table (ParentId int, Name nvarchar(50), Value nvarchar(50));
insert into @optionalFields values (1, 'Field1', 'Foo');
insert into @optionalFields values (1, 'Field2', 'Bar');
insert into @optionalFields values (1, 'Field3', '42');
insert into @optionalFields values (2, 'Field1', 'Bar');
insert into @optionalFields values (2, 'Field2', 'Foo');
insert into @optionalFields values (2, 'Field3', '24');
declare @data table (Id int, Name nvarchar(50));
insert into @data values (1, 'Test record 1');
insert into @data values (2, 'Test record 2');
declare @joined table (Id int, Name nvarchar(50), OptionalFieldName nvarchar(50), OptionalFieldValue nvarchar(50));
insert into @joined
select
data.Id
,data.Name
,opt.Name
,opt.Value
from @data data
inner join @optionalFields opt on data.Id = opt.ParentId
declare @cols as nvarchar(max) =
stuff((select distinct ',' + quotename(OptionalFieldName) from @joined for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '');
select * into
select
Id
,Name
,OptionalFieldName
,OptionalFieldValue
,row_number() over (partition by Id order by Id) RN
from
declare @query as nvarchar(max) = '
select Id, Name, ' + @cols + '
from (select Id, Name, OptionalFieldName, OptionalFieldValue, row_number() over (partition by Id order by Id) RN from #tmp) src
pivot (max(OptionalFieldName) for RN in (' + @cols + ')) pvt';
execute(@query);
drop table
SSMS gives me 2 errors:
- Msg 8114, Level 16, State 1, Line 4 Error converting nvarchar to bigint data type.
- Msg 473, Level 16, State 1, Line 4 An invalid value for Field1 is provided in the PIVOT statement.
The select statement "debug" returns this:

The article (link above) seemed very promising, but I can’t get it to work. What am I doing wrong? Or is this article completely wrong, and what am I trying to do is impossible?
SO, - , " " , , - , OptionalFieldName , , OptionalFieldValue - , , , AFAIK.