求一句SQL,来的得到如题结果

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