我在SQL Server 2008中有以下表格:
[ID] [Filiale] [Mitarbeiter]
1 01 Müller
2 01 Meier
3 01 Schmidt
4 02 Schulz
5 02 Schröder
我需要一个创建以下输出的查询:
[Filiale] [Mitarbeiter1] [Mitarbeiter2] [Mitarbeiter3] [Mitarbeiter4] [Mitarbeiter5]
01 Müller Meier Schmidt NULL NULL
02 Schulz Schröder NULL NULL NULL
列可以固定为[Mitarbeiter1] - [Mitarbeiter5],因为每个Filiale不会超过5行。
非常感谢您的帮助!
答案 0 :(得分:2)
使用SQL Server 2008,Pivot和Ranking功能相结合,可为每位员工提供所需的结果 首先,我们为每个分支中的每个empoyee分配一个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