Уловка двоякая. Сначала вам нужно добавить способ разделения данных по имени. Rownumber поможет в этом. Во-вторых, нужно повернуть старомодный путь.
Rownumber - это оконная функция, и вы можете добавить к ней раздел. этот раздел необходим, чтобы определить, будет ли что-то первым, вторым, третьим транспонированным столбцом. Единственным недостатком этого метода является необходимость жестко задавать количество транспонированных столбцов
. Старомодные сводные диаграммы работают с утверждениями group by и case. Чтобы обойти требуемую агрегацию, вы можете использовать оператор MAX, так как в этом случае в основном игнорируется оператор max.
if OBJECT_ID('tempdb..#test') is not null
begin
drop table #test
end
create table #test
(
name varchar(50)
,price int
,seofilename varchar(50)
)
insert into #test
values
('apple', 10, 'apple1'),
('apple',10,'apple4'),
('pear',23,'pear1'),
('pear',23,'pear5'),
('banana',56,'banan9'),
('banana',56,'banan6'),
('banana',56,'banan')
select
name,
price,
max(case when rownum = 1 then seofilename else null end) as PrimaryFileName,
max(case when rownum = 2 then seofilename else null end) as SecondaryFileName,
max(case when rownum = 3 then seofilename else null end) as TertiaryFileName
from
(
select
name,
price,
seofilename,
ROW_NUMBER() over (partition by name order by name) as rownum
from
#test
) Q
group by
name,
price