oracle拼接不同行的同一个字段
时间: 2023-08-08 17:06:16 浏览: 41
在Oracle中,可以使用LISTAGG函数来拼接不同行的同一个字段。示例如下:
假设有以下表结构和数据:
```
CREATE TABLE test (
id NUMBER,
name VARCHAR2(50),
group_name VARCHAR2(50)
);
INSERT INTO test (id, name, group_name)
VALUES (1, 'Alice', 'A');
INSERT INTO test (id, name, group_name)
VALUES (2, 'Bob', 'A');
INSERT INTO test (id, name, group_name)
VALUES (3, 'Charlie', 'B');
INSERT INTO test (id, name, group_name)
VALUES (4, 'David', 'B');
INSERT INTO test (id, name, group_name)
VALUES (5, 'Eve', 'B');
```
如果要拼接每个分组下的所有名字,可以使用以下SQL语句:
```
SELECT group_name, LISTAGG(name, ',') WITHIN GROUP (ORDER BY id) AS names
FROM test
GROUP BY group_name;
```
执行结果为:
```
GROUP_NAME | NAMES
-----------+-------------------
A | Alice,Bob
B | Charlie,David,Eve
```
其中,LISTAGG函数将同一分组下的名字拼接成一个字符串,并使用逗号作为分隔符。WITHIN GROUP子句指定了拼接顺序,这里按照ID进行排序。GROUP BY语句将结果按分组字段进行分组。