Решение должно использовать PIVOT
. Тем не менее, PIVOT
предназначен для использования в значениях категории, что означает, что у вас одинаковый набор категорий для каждой группы. У вас нет ничего подобного между каждой группой, например, «индекс имени» или что-то еще. Таким образом, вы не можете правильно определить столбцы PIVOT
.
Простое решение заключается в изготовлении категории для каждого имени в группе, как Name1
, Name2
, Name3
и т.д., которые вы можете PIVOT
на. Это может быть сделано с ROW_NUMBER()
пункта, как это:
select Code,
'Name' + cast(
row_number() over (partition by Code order by code)
as varchar(10)) as NameType,
Name
from table1
который производит результаты, которые выглядят следующим образом:
| CODE | NAMETYPE | NAME |
|------|----------|-------|
| A | Name1 | John |
| A | Name2 | Bob |
| A | Name3 | Chris |
| B | Name1 | James |
| B | Name2 | Jen |
| B | Name3 | Teddy |
Теперь у вас есть что-то общее между группами PIVOT
на - в NAMETYPE
колонке:
select * from (
select Code,
'Name' + cast(
row_number() over (partition by Code order by code)
as varchar(10)) as NameType,
Name
from table1
) a
pivot (max(Name) for [NameType] in ([Name1], [Name2], [Name3])) piv
Это дает желаемые результаты:
| CODE | NAME1 | NAME2 | NAME3 |
|------|-------|-------|-------|
| A | John | Bob | Chris |
| B | James | Jen | Teddy |
Демо: http://www.sqlfiddle.com/#!6/21499/7
Посмотрите здесь http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx –
Побольше разъяснение помогло бы –
Вы смотрели на 'UNPIVOT'? – mrtig