Oracle/SQL -1つの[文字列集約]への複数のレコード
-
29-10-2019 - |
質問
これはばかげたリクエストであることに気付きましたが、私がやろうとしているのは、複数のレコードを文字通りのテキストとともに単一の列に引き戻すことです。
だからこのようなテーブルを与えられた
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>
これを行う方法について何か考えはありますか?私はOracle9iを実行しています、そして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のconcatを行う別のSelectからの内側の選択を単に持っていることでした...
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;
フロントエンドの環境は、結果を確認しようとするときにクエリを受け入れますが、エラーが発生します。リソースは無効です。表示する前に、クエリを修正する必要がある場合があります。
エラーはおそらく役に立たないことを知っていますが、なぜ私のバージョンが機能していないのかアイデアはありますか?
ありがとう!
正しい解決策はありません
所属していません StackOverflow