[英]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的数据有两种已知技术
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.