concat在sql中的所有列值

paw*_*que 27 sql concatenation

如何将从sql查询返回的差异行中的所有列值连接成一个值?这是一个例子:

查询返回:

FOO
------
RES1

RES2

RES3

现在我希望得到如下结果:

FOOCONCAT
-----
RES1RES2RES3

有没有办法在sql中执行此操作?

Qua*_*noi 49

SQL Server:

SELECT  col1 AS [text()]
FROM    foo
FOR XML PATH ('')
Run Code Online (Sandbox Code Playgroud)

MySQL:

SELECT  GROUP_CONCAT(col1 SEPARATOR '')
FROM    foo
Run Code Online (Sandbox Code Playgroud)

PostgreSQL:

SELECT  array_to_string
        (
        ARRAY
        (
        SELECT  col1
        FROM    foo
        ), ''
        )
Run Code Online (Sandbox Code Playgroud)

Oracle:

SELECT  *
FROM    (
        SELECT  col1, ROW_NUMBER() OVER(ORDER BY 1) AS rn
        FROM    foo
        MODEL
        DIMENSION BY
                (rn)
        MEASURES
                (col1, col1 AS group_concat, 0 AS mark)
        RULES UPDATE (
                group_concat[rn > 1] =  group_concat[CV() - 1] || col1[CV()],
                mark[ANY] = PRESENTV(mark[CV() + 1], 0, 1)
                )
        )
WHERE   mark = 1
Run Code Online (Sandbox Code Playgroud)


dev*_*vio 9

Quassnoi的Oracle解决方案令人印象深刻,但我发现 使用SYS_CONNECT_BY_PATH()而不是MODEL魔术更简单.

SELECT REPLACE(MAX(SYS_CONNECT_BY_PATH(foo, '/')), '/', '') conc
FROM (
    SELECT T_FOO.*, ROW_NUMBER() OVER (ORDER BY FOO) R FROM T_FOO
)
START WITH r=1
CONNECT BY PRIOR r = r-1;
Run Code Online (Sandbox Code Playgroud)