繁体   English   中英

合并多行以获得单行

[英]Combining multiple rows to get a single one

源表:

----------------------------------------
| Employee Name   | department | Emp Id |
----------------------------------------
| Sam             | Sales      | 101    |
----------------------------------------
| Sam             | Finance    | 101    |
----------------------------------------
| Dirk            | marketing  | 102    |
----------------------------------------
| Dirk            | Research   | 102    |
----------------------------------------

需要 Output:

------------------------------------------------------
| Employee Name   | Emp Id | department1 | department2|
------------------------------------------------------
| Sam             | 101    | Sales       | Finance    |
------------------------------------------------------
| Dirk            | 102    | marketing   | Research   |
------------------------------------------------------

您能帮忙解决一下我应该使用什么功能或查询来获得上述 output 吗?

pivot的数据有两种已知技术

  1. 通过使用条件聚合
SELECT EmployeeName, EmpId,
       MAX(DECODE(rn,1,Department)) AS Department_1,
       MAX(DECODE(rn,2,Department)) AS Department_2
  FROM (
        SELECT t.*, 
               ROW_NUMBER() OVER 
               (PARTITION BY EmpId,EmployeeName ORDER BY Department) AS rn
          FROM t
       )
GROUP BY EmployeeName, EmpId

2.通过使用PIVOT子句

SELECT *
  FROM (
        SELECT t.*, 
               ROW_NUMBER() OVER 
               (PARTITION BY EmpId,EmployeeName ORDER BY Department) AS rn
          FROM t
       )
 PIVOT
 (
  MAX(Department) AS Department FOR rn IN (1,2)
 ) 

对于这两种情况都需要枚举旋转的部门列。 为此, ROW_NUMBER()解析 function 非常适合

演示

如果您只有两个值,则可以使用max()min()

select name, empid,
       min(department) as department1,
       nullif(max(department), min(department)) as department2
from t
group by name, empid;

暂无
暂无

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

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