各种数据库中实现查询结果拼接的SQL实现

作者:青山常在人不老   阅读 (2163)  |  收藏 (0)  |  点赞 (0)

摘要

本文主要讲解如何在不同的数据库间实现通过select 查询结果,并将多行查询结果拼接成一串的实现方式,包含Oracle、Mysql、SQLServer等等。本文涉及到的函数有wmsys.wm_concat、for XML PATH。


原文链接:各种数据库中实现查询结果拼接的SQL实现

本文解决如下问题:

1、oracle语句中如何把一列的值合并为一个值,用逗号隔开?

2、如何使用for XML PATH将查询结果合成一列,以逗号分隔

3、Oracle中使用wm_concat对多行查询结果进行拼接

需求如下:

有一个表table1

midqidckid
A1KD001ck001
A1KD001ck002
B1QS123cd111
B1QS123cd112
C2RT001rt115
C2RT001cf001
C2RS156yu116

想要实现以下结果:当mid和QID相同时,拼接ckid,要求结果如下

midqidckid
A1KD001ck001,ck002
B1QS123cd111,cd112
C2RT001rt115,cf001
C2RS156yu116

1、SQLServer通过for XML PATH实现:

CREATE TABLE table1 (
	mid CHAR (2),
	qid CHAR (5),
	ckid CHAR (5)
);

INSERT INTO table1
VALUES
	('A1', 'KD001', 'ck001'),
	('A1', 'KD001', 'ck003'),
	('B1', 'QS123', 'cd111'),
	('B1', 'QS123', 'cd112'),
	('C1', 'RT001', 'rt115'),
	('C1', 'RT001', 'cf001'),
	('C1', 'RS156', 'yu116');

-- 使用 FOR XML path 
SELECT
	a.mid,
	a.qid,
	(
		SELECT
			ckid + ','
		FROM
			table1 b
		WHERE
			a.mid = b.mid
		AND a.qid = b.qid FOR XML path ('')
	) ckid
FROM
	table1 a
GROUP BY
	a.mid,
	a.qid 
-- 或者下面这个使用stuff FOR XML path 
SELECT
		a.mid,
		a.qid,
		stuff (
			(
				SELECT
					',' + ckid
				FROM
					table1 b
				WHERE
					a.mid = b.mid
				AND a.qid = b.qid FOR XML path ('')
			),
			1,
			1,
			''
		) ckid
	FROM
		table1 a
	GROUP BY
		a.mid,
		a.qid

2、Oracle语句中如何把一列的值合并为一个值,用逗号隔开

以下函数请注意下:

a) to_char(wmsys.wm_concat(to_char( st.col_name))) as new_name

b) to_char: 将当前值转换成字符串类型;

c) wmsys.wm_concat:拼接函数

示例

--这种情况一般是策应多对多关系的中间表

--比如:惩罚方式(警告,罚款,记过) 对应人

--某个表中记录了  id ,user_name,user_id,mode_id,mode_name,现在要根据人去找方式,

SELECT
	t.user_id,
	to_char (
		wmsys.wm_concat (to_char(t.mode_name))
	) AS modoe_name
WHERE
	t.user_id = '1'
GROUP BY
	t.user_id;

--结果会是: 1   记过,罚款,警告  结果拼接默认用逗号

----需要注意的是后面的分组条件,这个条件必须是出了拼接列之外的所有结果

SELECT
	t.user_id,
	t.user_name,
	to_char (
		wmsys.wm_concat (to_char(t.mode_name))
	) AS modoe_name
WHERE
	t.user_id = '1'
GROUP BY
	t.user_id,
	t.user_name;


分类   数据库设计
字数   1643

博客标签    Oracle 多行查询结果进行拼接   wmsys.wm_concat 用法   for XML PATH用法  

评论