Voy a mostrar como obtener el resultado de 3 columnas de 1 QUERY en un único string. Para el anidado es muy importante el operador ' || ', que nos permitirá anidar.
NOMBRE +CAL.GRUPO+CA.ANO+ SI CAL.CODCALIDAD<2 00="" cal.codcalidad="" nbsp="">1 Y <3 0="" length="" si="">2 CAL.CODCALIDAD3>2>
AS CERTIFICADO
SELECT O.*,'NOMBRE-' || to_char(CAL.GRUPO)||to_char('-')||SUBSTR(TO_CHAR(CAL.ANO),3)||"+
" CASE WHEN LENGTH(TO_CHAR(CAL.CODCALIDAD)) < 2 "+
" THEN '00'||TO_CHAR(CAL.CODCALIDAD) "+
" END ||"+
" CASE WHEN LENGTH(TO_CHAR(CAL.CODCALIDAD)) >1 AND LENGTH(TO_CHAR(CAL.CODCALIDAD))<3 p="">
" THEN '0'||TO_CHAR(CAL.CODCALIDAD) "+
" END|| "+
" CASE WHEN LENGTH(TO_CHAR(CAL.CODCALIDAD)) >2 "+
" THEN TO_CHAR(CAL.CODCALIDAD) "+
" END "+
" AS CERTIFICADO FROM T o "+
" JOIN L t on o.codl=t.codl "+
" JOIN PO a on t.costact=a.id "+
" JOIN G cal on cal.IDG=a.id "+
" WHERE o.coddar IN (?1) "+
" AND t.fecha between ?2 and ?3 "+
" ORDER BY t.fecha asc,o.orden2 asc,o.orden asc 3>