【发布时间】:2020-12-06 10:32:03
【问题描述】:
我有以下数据表(例如简化)
TEAM WORKS TT
TEAM_A JOB_1 10
TEAM_A JOB_3 20
TEAM_B JOB_2 30
我希望得到以下结果
TEAM WORKS TT
TEAM_A JOB_1 10
TEAM_A JOB_2 NULL
TEAM_A JOB_3 20
TEAM_B JOB_1 NULL
TEAM_B JOB_2 30
TEAM_B JOB_3 NULL
这个结果表需要为每个团队添加原始数据集中没有出现的工作类型,并给出时间值NULL
我尝试了以下 SQL,并尝试了许多连接类型,但始终无法获得我想要的结果。
WITH BASE AS (
SELECT 'TEAM_A' AS TEAM, 'JOB_1' AS WORKS, 10 AS TT FROM DUAL
UNION ALL SELECT 'TEAM_A' AS TEAM, 'JOB_3' AS WORKS, 20 AS TT FROM DUAL
UNION ALL SELECT 'TEAM_B' AS TEAM, 'JOB_2' AS WORKS, 30 AS TT FROM DUAL
)
SELECT
BASE.TEAM
, BASE.WORKS
, BASE.TT
FROM BASE
FULL OUTER JOIN (
SELECT 'JOB_1' AS WORKS FROM DUAL
UNION ALL SELECT 'JOB_2' AS WORKS FROM DUAL
UNION ALL SELECT 'JOB_3' AS WORKS FROM DUAL
) WORK_TYPES ON BASE.WORKS = WORK_TYPES.WORKS
;
【问题讨论】:
-
交叉加入团队和工作价值观。外部联接。
-
jarlh,你有例子吗?当我交叉加入时,它仍然给我不正确的结果。
-
partitioned outer join正是为此类任务而创建的。
标签: sql oracle join left-join oracle12c