在SQL / Oracle中将多行显示为一行(不是以逗号分隔)

时间:2015-09-27 10:09:17

标签: sql oracle

是否有针对以下场景的SQL代码

我有一张如下表格

firewalls:
    default:
        pattern: ^/user
        anonymous: ~
        form_login:
            login_path: /user/login
            check_path: /user/login_check
            require_previous_session: false

数据需要合并为一个

Id  Comments    Type
1   Work    Day
1   Play    Afternoon
1   Sleep   Night

另一个数据下面的一个数据

2 个答案:

答案 0 :(得分:0)

我认为你可以使用这样的查询:

>>> [i for i in re.split(r'[\d\s\\]|(?<=\\)n',s) if i]

答案 1 :(得分:0)

这可以在Oracle 11+上正常运行。我所做的是聚合注释和类型列,在其间,我插入了CHR(10),这是换行的ASCII值。您可能无法在客户端中正确地看到输出,但如果您在sql developer命令行中运行它,您将看到所需的输出。

          WITH TBL (ID,COMMENTS,TYPE)
          AS (
          SELECT 1,'Work','Day' FROM DUAL UNION
          SELECT 1,'Play','Afternoon' FROM DUAL UNION
          SELECT 1,'Sleep','Night' FROM DUAL 
          )
          SELECT ID, 
          LISTAGG(COMMENTS,CHR(10)) WITHIN GROUP (ORDER BY ID)  COMMENTS,
           LISTAGG(TYPE,CHR(10)) WITHIN GROUP (ORDER BY ID)  TYPE
          from tbl group by id