2

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

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

4

2 回答 2

6

如果您有 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.htm 和这个 sqlfiddle

  | ID |               STR_OF_STR |
    |----|--------------------------|
    |  1 | TestSTR1TestSTR3TestSTR5 |
    |  2 |         TestSTR4TestSTR2 |
    |  3 |                 TestSTR6 |
于 2013-10-07T04:57:23.560 回答
5

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;
于 2013-10-07T05:28:53.047 回答