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)
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)
归档时间: |
|
查看次数: |
65332 次 |
最近记录: |