Oracle/SQL - record multipli in una [aggregazione stringa
-
29-10-2019 - |
Domanda
Mi rendo conto che questa è una richiesta ridicola, ma quello che sto cercando di fare è riportare più record in una sola colonna insieme ad un testo letterale.
Quindi, dato un tavolo come questo
REGION CITY SID
-------------------
1 Chicago 1234
1 Palatine 567
1 Algonquin 234
1 Wauconda 987
Vorrei vedere un singolo record con una colonna, altre colonne come la regione vanno bene, ma una singola colonna come questa
<option value="1234">Chicago</option><option value="567">Palatine</option><option value="234">Algonquin</option><option value="987">Wauconda</option>
Qualche idea su come farlo? Sto eseguendo Oracle 9i e non posso farlo in PL/SQL
Ok il formato del tavolo è cambiato un po ', ma l'idea è la stessa
COUNTRY STORECODE STORE_NAME
------------------------------
USA 1234 Chicago
USA 567 Palatine
CAN 987 Toronto
Quindi ho trovato questo codice che passa attraverso i link elencati
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;
E quando lo eseguo vedo questo output
COUNTRY COUNTRY_HTML
--------------------
USA 1234,567
CAN 987
Il mio pensiero era semplicemente quello di avere il tiro interno selezionato da un'altra selezione in cui faccio la mia concata del StoreCode e Store_Name insieme all'HTML richiesto in questo modo ...
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;
Mentre il nostro ambiente front -end accetta la query quando provo a rivedere i risultati ottengo un errore: la risorsa non è valida. Potrebbe essere necessario ricreare la query prima di visualizzare.
So che questo errore probabilmente non è utile, ma qualche idea per cui la mia versione non funziona?
Grazie!
Nessuna soluzione corretta