我在3个不同的表中有员工信息。表具有以下信息
表Emp1:
empid dep salary
1 BI 100
表Emp2:
empid dep salary
1 PS 200
2 PS null
表Emp3:
empid dep salary
1 Sales 300
2 Sales 400
select * from emp1 union
select * from emp2 union
select * from emp3
输出量:
empid dep salary
1 BI 100
1 PS 200
1 Sales 300
2 PS null
2 Sales 400
如果员工属于dep=BI,则显示BI薪金如果员工属于dep=Sales,则检查该员工是否也属于PS。如果他属于“PS”,则检查“PS”工资是否为空,如果不为空,则显示PS和销售部门行的PS工资,如下所示。
empid dep salary
1 BI 100
1 PS 200
1 Sales 200
2 PS null
2 Sales 400
在不加入emp2和emp3的情况下,
3条答案
按热度按时间efzxgjgh1#
我们可以尝试使用条件聚合沿着解析函数:
23c0lvtd2#
您可以在
CASE
表达式中使用分析函数:其中,对于样本数据:
输出:
| EMPID| DEP|工资|
| --|--|--|
| 1 |BI| 100 |
| 1 |销售| 200 |
| 1 |PS| 200 |
fiddle
gpfsuwkq3#
其中一个选项是联合所有数据(以CTE形式执行),然后使用带有EXISTS子查询的Case表达式来检查DEP='Sales'的条件:
...联合所有...
...和main SQL,结果是: