id type note
100 I ABC
100 O A123
100 D E321
101 I ABD
数据如上,我想得到以下结果 (id为100):
id memo
100 I:ABC/O:A123/D:E321
谢谢大侠!
SELECT id, LISTAGG(type || ':' || note, '/') WITHIN GROUP AS MergedTypeNote
FROM TableName
GROUP BY id;
试一下看看
SELECT
id,
GROUP_CONCAT( CONCAT( type, ':', note ) SEPARATOR '/' ) AS memo
FROM
test t
WHERE
id = 100
如上,基于MySQL数据库,满意请采纳,谢谢。
select id,
listagg(concat(concat(type, ':'), note), '/') memo
from test
where id = 100
group by id
Oracle可用上述语句。
你把结果拿到,做一些数据处理即可啊 memo这个字段用数据库函数进行运算求的
比如concat连接函数
与数据库系统有关,有的数据库系统支持得更好。请问是什么数据库系统。
我用SQL Server 写得并测试通过:
CREATE TABLE TestMerge
(
id Int,
type NCHAR(1),
Note NVARCHAR(256)
);
INSERT INTO TestMerge
VALUES (100, 'I', 'ABC'),
(100, 'O', 'A123'),
(100, 'D', 'E321'),
(101, 'I', 'ABD');
SELECT id,
STRING_AGG(type + ':' + note, '/')
FROM TestMerge
GROUP BY id
-- oUTPUT
100 I:ABC/O:A123/D:E321
101 I:ABD
这个一条语句搞不定吧,用批处理可以吗?
不好意思,是Oracle,请大家再帮帮忙,谢谢谢谢!
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
好了,谢谢benbenli !!
哦,必须要有ORDER BY,如下:
CREATE TABLE TestMerge
(
id NUMBER,
type CHAR(1),
Note VARCHAR(256)
);
INSERT INTO TestMerge
VALUES (100, 'I', 'ABC');
INSERT INTO TestMerge
VALUES (100, 'O', 'A123');
INSERT INTO TestMerge
VALUES (100, 'D', 'E321');
INSERT INTO TestMerge
VALUES (101, 'I', 'ABD');
SELECT id, LISTAGG(type || ':' || note, '/') WITHIN GROUP (ORDER BY Type, Note) AS MergedTypeNote
FROM TestMerge
GROUP BY id;
-- Resultset
ID MERGEDTYPENOTE
100 D:E321/I:ABC/O:A123
101 I:ABD