Вам понадобится значение для формирования столбцов, которые я делаю с row_number. Результат - то, что вы хотите. Единственный минус, который я имею против PIVOT, это то, что вам нужно знать, сколько столбцов заранее. Я использую аналогичный метод, но создаю select как динамический SQL и затем могу вставить мои столбцы.
РЕДАКТИРОВАТЬ: обновлено, чтобы отображать столбцы как вес1, вес2 и т. Д.
create table #temp (Item int, Weight int)
insert into #temp (Item, Weight)
Values (12345, 10),
(12345, 11),
(654321, 50),
(654321, 20),
(654321, 200)
SELECT *
FROM (SELECT Item,
Weight,
'weight' + cast(Row_number()
OVER (partition by Item order by item) as varchar(10)) as seq
FROM #temp) as Src
PIVOT ( MAX(Weight) FOR Seq IN ([Weight1], [Weight2], [Weight3]) ) as PVT