0

これはばかげた要求だと思いますが、私がやろうとしているのは、複数のレコードをリテラル テキストと共に 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;

結果を確認しようとすると、フロントエンド環境はクエリを受け入れますが、エラーが発生します: リソースが無効です。表示する前に、クエリを再作成または修正する必要がある場合があります。

エラーはおそらく役に立たないことはわかっていますが、私のバージョンが機能しない理由はありますか?

ありがとう!

4

3 に答える 3

3

恥ずかしいですが、次のようなことができます。

select replace(blah2,',','')
  from ( select wm_concat(blah) as blah2
           from ( select '<option value="' || sid || '">' || city || '</option>' as blah
                    from my_table
                         )
                 )
于 2012-02-22T23:05:24.227 に答える
-2

DBMS_XMLGEN で遊んだことはありますか?

于 2012-02-22T23:44:27.587 に答える
-3

Oracle で集計関数を作成できます。ドキュメントを参照してください。

于 2012-02-22T22:56:19.753 に答える