例:ID PID SID
1 2 3
4 5 6
7 8 9
结果: ID PID SID MAX_ID
1 2 3 9
4 5 6 9
7 8 9 9
--测试数据
WITH TEST AS (SELECT 1 ID,2 PID,3 SID FROM DUAL
UNION ALL
SELECT 4 ID,5 PID,6 SID FROM DUAL
UNION ALL
SELECT 7 ID,8 PID,9 SID FROM DUAL )
--首先思路是取出横向最大值
SELECT GREATEST(ID,PID,SID) FROM TEST;
--然后竖向取最大值
SELECT MAX(GREATEST(ID,PID,SID)) MAX_ID FROM TEST;
--再将MAX_ID拼倒最后一列
SELECT * FROM TEST,(SELECT MAX(GREATEST(ID,PID,SID)) MAX_ID FROM TEST) T;
--这样写考虑效率问题,存在TEST扫描两次。使用分析函数避免此问题。
SELECT TEST. *,MAS(GREATEST(TEST. ID,TEST. PID,TEST. SID)) OVER (PARTITION BY 1) FROM TEST ;
注:如有更好建议欢迎留言私密。