查询结果集合成一列的sqlserver实现方法stuff

本文介绍了如何在SQL Server中利用STUFF和FOR XML PATH函数将查询结果集合并为一列。通过举例和代码展示了解决特定需求的方法,即在多个字符串间插入指定字符并删除首个字符。
摘要由CSDN通过智能技术生成

我有个需求如下图

表的结构关系


网上找了一下资料,发现可以用stuff+for xml path('')

for xml path('')的作用是将字符串先拼成一个

 SELECT
		*,
		RLCD = (select ',' + RLCD from WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD for xml path('')),
		RLNM=(select ',' + RLNM from WQ_ROLE_B WHERE RLCD IN(SELECT RLCD FROM WQ_USERROLE_B WHERE URCD=WQ_USER_B.URCD) for xml path('')) 
	FROM
		WQ_USER_B

得到的结果如下,但出现一个
一个包含三级项目的结构(例如,可能存在一个主项目表,然后嵌套有子项目和孙项目)转换为单SQL通常涉及到递归查询或自连接(JOIN)。假设有一个简单的例子,我们有两个表`projects`和`project_relations`,其中`projects`表存储基本信息(如`id`, `name`),而`project_relations`表记录了项目之间的层级关系。 ```sql CREATE TABLE projects ( id INT PRIMARY KEY, name VARCHAR(255), parent_id INT ); CREATE TABLE project_relations ( child_id INT, parent_id INT, FOREIGN KEY (child_id) REFERENCES projects(id), FOREIGN KEY (parent_id) REFERENCES projects(id) ); ``` 为了获取所有项目的扁平化表,我们可以使用递归查询,比如在PostgreSQL中: ```sql WITH RECURSIVE project_tree AS ( SELECT p.id, p.name, p.parent_id, ARRAY[]::INT[] path FROM projects p WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, ap.path || int_to_array(c.id, ',') FROM projects c JOIN project_tree ap ON c.parent_id = ap.id ) SELECT * FROM project_tree; ``` 如果数据库不支持递归查询,可以使用自连接结合层级查询: ```sql WITH recursive_project AS ( SELECT id, name, parent_id, ARRAY[id] AS path FROM projects WHERE parent_id IS NULL UNION ALL SELECT pr.child_id, pr.child_name, pr.parent_id, ap.path || pr.child_id FROM project_relations pr JOIN recursive_project ap ON pr.parent_id = ap.id ) SELECT id, name, COALESCE(string_agg(path, ','), '0') AS flattened_path FROM recursive_project GROUP BY id, name, parent_id; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值