Oracle / SQL - plusieurs enregistrements en une seule [agrégation de chaînes
-
29-10-2019 - |
Question
Je me rends compte que c'est une demande ridicule, mais ce que j'essaie de faire, c'est de retirer plusieurs enregistrements dans une seule colonne avec du texte littéral.
Alors étant donné une table comme celle-ci
REGION CITY SID
-------------------
1 Chicago 1234
1 Palatine 567
1 Algonquin 234
1 Wauconda 987
Je voudrais revoir un seul disque avec une colonne, d'autres colonnes comme la région sont bien, mais une seule colonne comme celle-ci
<option value="1234">Chicago</option><option value="567">Palatine</option><option value="234">Algonquin</option><option value="987">Wauconda</option>
Des idées sur la façon de faire cela? J'exécute Oracle 9i et je ne peux pas le faire en PL / SQL
D'accord, le format de table a un peu changé, mais l'idée est la même
COUNTRY STORECODE STORE_NAME
------------------------------
USA 1234 Chicago
USA 567 Palatine
CAN 987 Toronto
J'ai donc trouvé ce code passant par les liens répertoriés
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;
Et quand je l'exécute, je vois cette sortie
COUNTRY COUNTRY_HTML
--------------------
USA 1234,567
CAN 987
Ma pensée était simplement d'avoir la traction intérieure de sélection dans un autre sélectionné où je fais mon concat de Storecode et Store_name avec le HTML requis comme celui-ci ...
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;
Bien que notre environnement frontal accepte la requête lorsque j'essaie de revoir les résultats, j'obtiens une erreur: la ressource n'est pas valide. Vous devrez peut-être recréer la création de réparer la requête avant la visualisation.
Je sais que cette erreur n'est probablement pas utile, mais des idées pourquoi ma version ne fonctionne pas?
Merci!
Pas de solution correcte