ORACLE SQL合并问题
请教大神们一个问题
如下表数据:
T1:

T2:

T3: 要求结果:

"表T1的ASSESS_ID 和表T2的ASSESS_ID 是一样的, RISK_ID 是个分组值, TI表的RN 是以partition by ASSESS_ID,RISK_ID分组ORDER BY Control_ID 用分析函数ROW_NUMBER排序出来的结果,
T2表的RN 是以partition by ASSESS_ID分组ORDER BY ISSUE_ID 用分析函数ROW_NUMBER排序出来的结果,
可能对同一个ASSESS_ID会有很多的ISSUE_ID,
两表join时要RN 相等为同一行数据,所以才排序。
现要求用一条SQL(非存储过程)生成表T3的数据,不能建表,update之类。
简言之 就是 每个RISK_ID会有数量不等的CONTROL_ID 和ISSUE_ID, 有一样的ASSESS_ID, 求帮忙
注意T3表RISK_ID 每行都应有数据,而Control_ID不存在可以为Null,表最终数据数量应与ISSUE_ID 个数相等,在线等,谢谢。"
表数据量很大,小弟只是举一个例子,请不要hardcode, 谢谢了,各位。
写了一点dummy的SQL,请大神们帮忙,
WITH T1 AS
(
SELECT 1001 RISKID, 2001 CONTROLID,3001 ASSESSID, 1 RN
FROM DUAL
UNION ALL
SELECT 1001 RISKID, 2002 CONTROLID,3001 ASSESSID, 2 RN
FROM DUAL
),
T2 AS
(
SELECT 4001 ISSUEID, 3001 ASSESSID, 1 RN
FROM DUAL
UNION ALL
SELECT 4002 ISSUEID, 3001 ASSESSID, 2 RN
FROM DUAL
UNION ALL
SELECT 4003 ISSUEID, 3001 ASSESSID, 3 RN
FROM DUAL
)
SELECT xxxxxxxxxxx
FROM T1 , T2
where .......
------解决思路----------------------
SELECT nvl(t1.RISKID,(SELECT min(a.RISKID) FROM t1 a WHERE a.ASSESSID = t2.ASSESSID )) AS RISKID ,
t1.CONTROLID,
t2.ISSUEID,
t2.ASSESSID
FROM t1,t2
WHERE t1.rn(+) = t2.rn ;
有点取巧,如果ASSESSID对应的RISKID不一致取RISKID可能会出问题,因为无法获取T1表RN和ASSESSID来准确定位RISKID
------解决思路----------------------
抱歉,没注意,那就使用分析函数吧
select max(T1.RISK_ID)over() RISK_ID,T1.CONTROL_ID,T2.ISSUE_ID,T2.ASSES_ID
FROM T1 FULL JOIN T2 ON T1.RN=T2.RN