Pregunta

Me doy cuenta de que esta es una solicitud ridícula, pero lo que estoy tratando de hacer es retirar múltiples registros a una sola columna junto con algún texto literal.

Entonces dada una mesa como esta

REGION  CITY    SID
-------------------
1   Chicago     1234
1   Palatine    567
1   Algonquin   234
1   Wauconda    987

Me gustaría ver un solo registro con una columna, otras columnas como la región están bien, pero una sola columna como esta

<option value="1234">Chicago</option><option value="567">Palatine</option><option value="234">Algonquin</option><option value="987">Wauconda</option>

¿Alguna idea sobre cómo hacer esto? Estoy ejecutando Oracle 9i y no puedo hacer esto en PL/SQL


De acuerdo, el formato de la tabla ha cambiado un poco, pero la idea es la misma

COUNTRY STORECODE   STORE_NAME
------------------------------
USA     1234        Chicago
USA     567         Palatine
CAN     987         Toronto

Así que encontré este código pasando por los enlaces enumerados

SELECT COUNTRY,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(STORECODE,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS COUNTRY_HTML
FROM   (SELECT COUNTRY,
               STORECODE,
               ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY STORECODE) AS curr,
               ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY STORECODE) -1 AS prev
        FROM   tablename)
GROUP BY COUNTRY
CONNECT BY prev = PRIOR curr AND COUNTRY = PRIOR COUNTRY
START WITH curr = 1;

Y cuando lo ejecuto veo esta salida

COUNTRY COUNTRY_HTML
--------------------
USA     1234,567
CAN     987

Mi pensamiento era simplemente tener el tirar de selección interno de otra selección donde hago mi concatación de storecode y store_name junto con el HTML requerido así ...

SELECT COUNTRY,
       LTRIM(MAX(SYS_CONNECT_BY_PATH(RECORD_HTML,','))
       KEEP (DENSE_RANK LAST ORDER BY curr),',') AS COUNTRY_HTML
FROM   (SELECT COUNTRY,
               RECORD_HTML,
               ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY RECORD_HTML) AS curr,
               ROW_NUMBER() OVER (PARTITION BY COUNTRY ORDER BY RECORD_HTML) -1 AS prev
        FROM   (SELECT COUNTRY, '<option value="' || STORECODE || '">' || STORE_NAME || '</option>' AS RECORD_HTML FROM tablename))
GROUP BY COUNTRY
CONNECT BY prev = PRIOR curr AND COUNTRY = PRIOR COUNTRY
START WITH curr = 1;

Si bien nuestro entorno frontal acepta la consulta cuando intento revisar los resultados, recibo un error: el recurso no es válido. Es posible que deba recrear para arreglar la consulta antes de ver.

Sé que ese error probablemente no sea útil, pero ¿alguna idea de por qué mi versión no funciona?

¡Gracias!

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top