В SQL Server 2008 объединенные функции Pivot и Ranking дают желаемый результат для каждого количества сотрудников.
Сначала мы назначаем ID каждому сотруднику в каждой ветви, начиная с 1 в каждой новой ветви, затем мы используем оператор pivot, чтобы перевернуть результат
create table data
(
id int,
branch int,
employee varchar(20)
)
insert into data (id, branch, employee) values
(1, 1, 'Müller'),
(2, 1, 'Meler'),
(3, 1, 'Schmidt'),
(4, 1, 'Schultz'),
(5, 2, 'Schröder'),
(6, 2, '=tg= Thomas'),
(7, 3, 'Stephan')
select branch, [1] as emp1, [2] as emp2, [3] as emp3, [4] as emp4, [5] emp5
from
(
select ROW_NUMBER() over (partition by branch order by id) employee_branch_id, branch, employee
from data
) data_with_employee_branch_id -- assign a number from 1 to n for each emplyee in the branch
pivot
(
max(employee) --it must be a aggregat, since we have only one row the max of a string will be the string
for employee_branch_id in ( [1], [2], [3], [4], [5] )
) as data_pvt