これはばかげた要求だと思いますが、私がやろうとしているのは、複数のレコードをリテラル テキストと共に 1 つの列に戻すことです。
したがって、このようなテーブルが与えられます
REGION CITY SID
-------------------
1 Chicago 1234
1 Palatine 567
1 Algonquin 234
1 Wauconda 987
列を持つ単一のレコードを確認したいのですが、地域のような他の列は問題ありませんが、このような単一の列
<option value="1234">Chicago</option><option value="567">Palatine</option><option value="234">Algonquin</option><option value="987">Wauconda</option>
これを行う方法について何か考えはありますか?Oracle 9i を実行していますが、PL/SQL では実行できません。
テーブルのフォーマットは少し変わっていますが、考え方は同じです
COUNTRY STORECODE STORE_NAME
------------------------------
USA 1234 Chicago
USA 567 Palatine
CAN 987 Toronto
だから私はこのコードがリストされたリンクを通過しているのを見つけました
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;
そして、実行すると、この出力が表示されます
COUNTRY COUNTRY_HTML
--------------------
USA 1234,567
CAN 987
私の考えは、このように必要なhtmlとともに、STORECODEとSTORE_NAMEの連結を行う別の選択から内部選択をプルさせることでした...
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;
結果を確認しようとすると、フロントエンド環境はクエリを受け入れますが、エラーが発生します: リソースが無効です。表示する前に、クエリを再作成または修正する必要がある場合があります。
エラーはおそらく役に立たないことはわかっていますが、私のバージョンが機能しない理由はありますか?
ありがとう!