假设我有一个包含 3 列的表格
ID INTEGER,
OFFSET INTEGER,
STR VARCHAR(50)
Run Code Online (Sandbox Code Playgroud)
包含值:
ID OFFSET STR
1 1 TestSTR1
1 2 TestSTR3
1 3 TestSTR5
2 1 TestSTR4
2 2 TestSTR2
3 1 TestSTR6
Run Code Online (Sandbox Code Playgroud)
我想为每个 ID 提取连接的“STR”(按 OFFSET 排序)。所以基本上,我想要的是:
ID STR
1 TestSTR1TestSTR3TestSTR5
2 TestSTR4TestSTR2
3 TestSTR6
Run Code Online (Sandbox Code Playgroud)
关于如何构建类似查询的任何想法?
您Oracle 11g可以使用此查询:
SELECT
ID,
LISTAGG(STR, ' ') WITHIN GROUP (ORDER BY OFFSET) AS STR
FROM Table
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)
您**Oracle 9i**可以使用此查询:
SELECT
ID,
rtrim (xmlagg (xmlelement(e,STR||' ')).extract ('//text()'), ' ') AS STR
FROM Table
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)
如果您有 Oracle 11g,您可以使用 LISTAGG() 函数:
SELECT
id
, listagg(str) WITHIN GROUP (ORDER BY OFFSET) AS str_of_str
FROM yourtable
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
请参阅:http : //docs.oracle.com/cd/E11882_01/server.112/e10592/functions089.htm 和这个 sqlfiddle
| ID | STR_OF_STR |
|----|--------------------------|
| 1 | TestSTR1TestSTR3TestSTR5 |
| 2 | TestSTR4TestSTR2 |
| 3 | TestSTR6 |
Run Code Online (Sandbox Code Playgroud)