【问题标题】:SQL query to convert rows into columns将行转换为列的 SQL 查询
【发布时间】:2011-09-10 04:37:54
【问题描述】:

我在 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 行。

非常感谢您的帮助!

【问题讨论】:

标签: sql tsql pivot


【解决方案1】:

在 SQL Server 2008 中,结合使用 Pivot 和 Ranking 函数可以为每个员工数量提供所需的结果 首先,我们为每个分支中的每个员工分配一个 ID,从每个新分支中的 1 开始,然后我们使用枢轴运算符来翻转结果

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

【讨论】:

  • 完美!这正是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多