我有一个包含1条记录的表,然后绑定到辅助表,该表可以包含不匹配,1匹配或2匹配.
我需要获取相应的记录并在同一行中显示它们,如果我只有1或没有匹配可以使用左连接,那么,因为我可以得到2个匹配,它产生2个记录.
1匹配的示例:
Select T1.ID, T1.Person1, T2.Owner
From T1
Left Join T2
ON T1.ID = T2.MatchID
产量
ID Person1 Owner1
----------------------
1 John Frank
2匹配示例:
Select T1.ID, T1.Person1, T2.Owner
From T1
Left Join T2
ON T1.ID = T2.MatchID
产量
ID Person1 Owner
----------------------
1 John Frank
1 John Peter
有没有办法可以制定我的选择,以便我的输出反映以下当我有2个匹配时:
ID Person1 Owner1 Owner2
-------------------------------
1 John Frank Peter
我对Oracle Pivots进行了一些探索,但无法找到一种方法来实现这一目标.还研究了在获取匹配时使用MIN()和MAX()两次在同一个表上使用左连接的可能性,但是我只能看到自己将其作为“无其他选项”场景.
有什么建议?
**编辑**
@ughai – 使用CTE确实在某种程度上解决了这个问题,但是在尝试检索所有记录时,从这个公共表派生的详细信息没有在LEFT JOIN上显示任何记录,除非我指定“MatchID”(CASE_MBR_KEY) value,意思是通过删除“where”子句,我的外连接不产生任何记录,即使CTE数据中有CASE_MBR_KEY值.
WITH CTE AS
(
SELECT TEMP.BEAS_KEY,
TEMP.CASE_MBR_KEY,
TEMP.FULLNAME,
TEMP.BIRTHDT,
TEMP.LINE1,
TEMP.LINE2,
TEMP.LINE3,
TEMP.CITY,
TEMP.STATE,
TEMP.POSTCD,
ROW_NUMBER()
OVER(ORDER BY TEMP.BEAS_KEY) R
FROM TMP_BEN_ASSIGNEES TEMP
--WHERE TEMP.CASE_MBR_KEY = 4117398
)
这是因为ROW_NUMBER值,给定记录的数量不一定是1或2,所以我尝试了以下,但得到ORA-01799:列可能不是外连接到子查询
--// BEN ASSIGNEE 1
LEFT JOIN CTE BASS1
ON BASS1.CASE_MBR_KEY = C.CASE_MBR_KEY
AND BASS1.R IN (SELECT min(R) FROM CTE A WHERE A.CASE_MBR_KEY = C.CASE_MBR_KEY)
--// END BA1
--// BEN ASSIGNEE 2
LEFT JOIN CTE BASS2
ON BASS2.CASE_MBR_KEY = C.CASE_MBR_KEY
AND BASS2.R IN (SELECT MAX(R) FROM CTE B WHERE B.CASE_MBR_KEY = C.CASE_MBR_KEY)
--// END BA2
**编辑2 **
通过将Row number子句移动到查询的“Where”部分而不是JOIN子句中来修复上述问题.似乎现在工作.
最佳答案 您可以将CTE与ROW_NUMBER()一起使用2 LEFT JOIN或PIVOT.
查询多个左连接
WITH CTE as
(
SELECT MatchID,Owner,ROW_NUMBER()OVER(ORDER BY Owner) r FROM t2
)
select T1.ID, T1.Person, t2.Owner as Owner1, t3.Owner as Owner2
FROM T1
LEFT JOIN CTE T2
ON T1.ID = T2.MatchID AND T2.r = 1
LEFT JOIN CTE T3
ON T1.id = T3.MatchID AND T3.r = 2;
用PIVOT查询
WITH CTE as
(
SELECT MatchID,Owner,ROW_NUMBER()OVER(ORDER BY Owner) R FROM t2
)
SELECT ID, Person,O1,O2
FROM T1
LEFT JOIN CTE T2
ON T1.ID = T2.MatchID
PIVOT(MAX(Owner) FOR R IN (1 as O1,2 as O2));
产量
ID PERSON OWNER1 OWNER2
1 John Maxwell Peter