13

私は次のようなデータを持っています

CUSTOMER,  CUSTOMER_ID, PRODUCT
ABC INC    1            XYX
ABC INC    1            ZZZ
DEF CO     2            XYX
DEF CO     2            ZZZ
DEF CO     2            WWW
GHI LLC    3            ZYX

データを次のように表示するクエリを作成したいと思います。

CUSTOMER, CUSTOMER_ID, PRODUCTS
ABC INC   1            XYX, ZZZ
DEF CO    2            XYX, ZZZ, WWW
GHI LLC   3            ZYX

役立つ場合はOracle10gを使用します。MYSQLを使用して機能するものを見ましたが、プレーンSQLまたはORACLEに相当するものが必要です。作成できるストアドプロシージャの例も確認しましたが、使用している製品でストアドプロシージャを使用することはできません。

これが、MySQLを使用している場合のMySQLでの動作です。

SELECT CUSTOMER, 
       CUSTOMER_ID, 
       GROUP_CONCAT( PRODUCT ) 
FROM MAGIC_TABLE 
GROUP BY CUSTOMER, CUSTOMER_ID

ありがとうございました。

4

4 に答える 4

21

LISTAGG は、この状況で使用する関数別の集計グループとして最適だと思います。

  SELECT CUSTOMER, CUSTOMER_ID,
         LISTAGG(PRODUCT, ', ') WITHIN GROUP (ORDER BY PRODUCT)
    FROM SOME_TABLE
GROUP BY CUSTOMER, CUSTOMER_ID
ORDER BY 1, 2
于 2012-04-20T20:06:01.127 に答える
4

このリンクは、Oracle でこれを行うさまざまな方法の例を多数参照しています。データベースに対して行う権限があるかどうかを確認してください。

于 2008-10-24T17:44:45.600 に答える
3

Oracle ユーザー関数「wm_concat」は、区切り文字「,」をデフォルトまたはソート順で指定できないことを除いて、LISTAGG と同じように機能します。ただし、10g と互換性があります。

于 2012-11-12T15:11:47.937 に答える
0

ありがとう、ナイジェル

私の SQL は可能な限りエレガントではありませんが、PLSQL や TSQL ではなく、SQL のみを必要とするソリューションが必要だったので、最終的には次のようになりました。

SELECT   CUSTOMER, CUSTOMER_ID, COUNT(PRODUCT) PROD_COUNT, 
         RTRIM( 
            XMLAGG( XMLELEMENT (C, PRODUCT || ',') ORDER BY PRODUCT
).EXTRACT ('//text()'), ',' 
         ) AS PRODUCTS FROM     (
         SELECT   DISTINCT CUSTOMER, CUSTOMER_ID, PRODUCT
         FROM     MAGIC_TABLE
         ) GROUP BY CUSTOMER, CUSTOMER_ID ORDER BY 1 , 2

XML 関数が正確に何をするのかはまだ正確にはわかりませんが、必要になったときに掘り下げます。

于 2008-10-24T18:52:03.157 に答える