sql >> データベース >  >> RDS >> Oracle

3列のORACLE10gでの文字列集約

    Oracle 10の場合、アプローチを使用します。問題は、内部クエリのパーティション分割です。

    WITH tab as (
    SELECT 1 as fdate,     'Apple' as fruit,    1 as num from dual union
    SELECT 1 as fdate,     'Apple' as fruit,    2 as num from dual union
    SELECT 1 as fdate,     'Apple' as fruit,    3 as num from dual union
    SELECT 1 as fdate,     'Kiwi' as fruit,    6 as num from dual union
    SELECT 1 as fdate,     'Kiwi' as fruit,    10 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    4 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    5 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    6 as num from dual union
    SELECT 2 as fdate,     'Kiwi' as fruit,    4 as num from dual union
    SELECT 2 as fdate,     'Kiwi' as fruit,    7 as num from dual )
    SELECT fdate, fruit,LTRIM(MAX(SYS_CONNECT_BY_PATH(num,','))
        KEEP (DENSE_RANK LAST ORDER BY curr),',') AS fruits_agg
        FROM   (SELECT fdate,
                fruit,
                num,
                ROW_NUMBER() OVER (PARTITION BY fdate, fruit ORDER BY num) AS curr,
                ROW_NUMBER() OVER (PARTITION BY fdate, fruit ORDER BY num) -1 AS prev
         FROM   tab)
      GROUP BY fdate,fruit
      CONNECT BY prev = PRIOR curr AND fruit = PRIOR fruit AND fdate = PRIOR fdate
     START WITH curr = 1;
    

    与える:

    FDATE             FRUIT   FRUITS_AGG                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
    1                "Kiwi"  "6,10"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    1                "Apple" "1,2,3"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
    2                "Kiwi"  "4,7"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
    2                "Apple" "4,5,6"
    

    Oracle11ソリューションははるかに簡単です:

    WITH tab as (
    SELECT 1 as fdate,     'Apple' as fruit,    1 as num from dual union
    SELECT 1 as fdate,     'Apple' as fruit,    2 as num from dual union
    SELECT 1 as fdate,     'Apple' as fruit,    3 as num from dual union
    SELECT 1 as fdate,     'Kiwi' as fruit,    6 as num from dual union
    SELECT 1 as fdate,     'Kiwi' as fruit,    10 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    4 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    5 as num from dual union
    SELECT 2 as fdate,     'Apple' as fruit,    6 as num from dual union
    SELECT 2 as fdate,     'Kiwi' as fruit,    4 as num from dual union
    SELECT 2 as fdate,     'Kiwi' as fruit,    7 as num from dual )
    select fdate
         , fruit
         , listagg(num,'-') within group ( order by num ) fruit_agg
    from tab
    group by fdate, fruit 
    

    返品:

    FDATE  FRUIT    FRUIT_AGG
    1      Kiwi      6-10
    1      Apple     1-2-3
    2      Kiwi      4-7
    2      Apple     4-5-6
    



    1. SELECTTOPエラー

    2. 数値を使用したMySQLクエリの並べ替え

    3. MicrosoftAccessとSQLServer

    4. 挿入中に文字列と主キーIDを連結する