让我说我有一个包含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
关于如何构建类似查询的任何想法?
答案 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.htm 和this 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;