Oracle - 用于连接多行的SQL

时间:2013-10-07 04:47:42

标签: sql oracle

让我说我有一个包含3列的表

   ID INTEGER,
   OFFSET INTEGER,
   STR VARCHAR(50)

包含值:

ID          OFFSET   STR
1              1              TestSTR1
1              2              TestSTR3
1              3              TestSTR5
2              1              TestSTR4
2              2              TestSTR2
3              1              TestSTR6

我想为每个ID拉出连接的“STR”(按OFFSET排序)。基本上,我想要的是:

ID           STR
1              TestSTR1TestSTR3TestSTR5
2              TestSTR4TestSTR2
3              TestSTR6

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

2 个答案:

答案 0 :(得分:3)

如果你有Oracle 11g,可以使用LISTAGG()函数:

SELECT
      id
    , listagg(str) WITHIN GROUP (ORDER BY OFFSET) AS str_of_str
FROM yourtable
GROUP BY id

见:http://docs.oracle.com/cd/E11882_01/server.112/e10592/functions089.htmthis sqlfiddle

  | ID |               STR_OF_STR |
    |----|--------------------------|
    |  1 | TestSTR1TestSTR3TestSTR5 |
    |  2 |         TestSTR4TestSTR2 |
    |  3 |                 TestSTR6 |

答案 1 :(得分:2)

Oracle 11g 中,您可以使用此查询:

SELECT 
ID, 
LISTAGG(STR, ' ') WITHIN GROUP (ORDER BY OFFSET) AS STR
FROM  Table
GROUP BY ID;
**Oracle 9i**

您可以使用此查询:

SELECT 
ID,
rtrim (xmlagg (xmlelement(e,STR||' ')).extract ('//text()'), ' ') AS STR
FROM  Table
GROUP BY ID;