Oracle - 连接多行的 SQL

Sac*_*rni 1 sql oracle

假设我有一个包含 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)

关于如何构建类似查询的任何想法?

Ham*_*eza 8

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)


Use*_*ady 5

如果您有 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)