繁体   English   中英

根据另一列将一列的值分成多列

[英]Separate values of one column into multiple columns based on other column

我有一个只有两列的表:

Table: Employees

+----------+-------------+
|Employee  | Designation |
+----------+-------------+
| Ron      | Manager     |
| James    | HR          |
| Toby     | Clerk       |
| Amanda   | Clerk       |
| Jenny    | Manager     |
| Quentin  | HR          |
| Roger    | Manager     |
| Harry    | Clerk       |
| Sunny    | Clerk       |
| Rachael  | Manager     |
+----------+-------------+

我需要编写查询以输出如下结果:

+-----------+--------- +------------+
| Manager   |  HR      |   Clerk    |
+-----------+----------+------------+
| Jenny     |  James   |   Amanda   |
| Rachael   |  Quentin |   Harry    |
| Roger     |  null    |   Sunny    |
| Ron       |  null    |   Toby     |
+-----------+----------+------------+ 

必须根据员工的名称将其分为不同的列,并按字母顺序排列。 网上有解决方案,但是大多数解决方案要么使用此数据创建一个带有id列的新表,以解决问题。 是否有一个简单的解决方案作为SQL查询来解决此问题,而无需创建任何新表?

您可以使用row_number()和某种类型的透视。 我更喜欢条件聚合:

select max(case when designation = 'Manager' then employee end) as Manager,
       max(case when designation = 'HR' then employee end) as HR,
       max(case when designation = 'Clerk' then employee end) as Clerk  
from (select e.*,
             row_number() over (partition by designation order by employee) as seqnum
      from employees e
     ) e
group by seqnum
order by seqnum;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM