代码之家  ›  专栏  ›  技术社区  ›  Forrest Marvez

ssis:oracle多行到一列输出,不带stragg

  •  2
  • Forrest Marvez  · 技术社区  · 15 年前

    当ID相同时,希望生成一个以逗号分隔的语言列表。

    表1:

    ID | LangID
    1    1
    1    2
    1    3
    2    3
    2    4
    3    1
    

    表2:

    ID | Language
    1    English
    2    Spanish
    3    French
    4    German
    

    希望生成如下结果:

    ID | Languages
    1    English, Spanish, French
    2    French, German
    3    English
    

    我尝试过的事情:

    stragg-ssis给了我“无效标识符”

    sys_connect_by_path-无法确定如何连接ID以转换为字符串语言。

    有什么建议吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   OMG Ponies    15 年前

    有多种方法可以执行字符串聚合以生成逗号分隔的列表-请参阅 this link for more details . 根据链接中的示例,尝试:

    SELECT x.id,
           LTRIM(MAX(SYS_CONNECT_BY_PATH(x.language,','))
           KEEP (DENSE_RANK LAST ORDER BY curr),',') AS employees
      FROM (SELECT a.id,
                   b.language,
                   ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.language) AS curr,
                   ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.language) -1 AS prev
              FROM TABLE_1 a
              JOIN TABLE_2 b ON b.id = a.langid) x
    GROUP BY x.id
    CONNECT BY prev = PRIOR curr AND x.id = PRIOR x.id
    START WITH curr = 1;
    
        2
  •  2
  •   Martin Schapendonk    14 年前

    对于11g,请查看 listagg function

    select t1.id, listagg(t2.language, ', ') within group (order by t2.language)
    from t1, t2
    where t1.langId = t2.id
    group by t1.id;