一列保存多个ID(将多个用逗号隔开的ID转换成用逗

背景:在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一个设备从属多个项目时,很

                        背景:在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一个设备从属多个项目时,很多人都会在员工表中加入一个deptIds VARCHAR(1000)列(本文以员工从属多个部门为例),用以保存部门编号列表(很明显这不符合第一范式,但很多人这样设计了,在这篇文章中我们暂不讨论在这种应用场景下,如此设计的对与错,有兴趣的可以在回复中聊聊),然后我们在查询列表中需要看到这个员工从属哪些部门。 初始化数据: 部门表、员工表数据: 复制代码 代码如下: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]')) DROP TABLE [dbo].Department GO --部门表 CREATE TABLE Department ( id int, name nvarchar(50) ) INSERT INTO Department(id,name) SELECT 1,'人事部' UNION SELECT 2,'工程部' UNION SELECT 3,'管理部' SELECT * FROM Department IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]')) DROP TABLE [dbo].Employee GO --员工表 CREATE TABLE Employee ( id int, name nvarchar(20), deptIds varchar(1000) ) INSERT INTO Employee(id,name,deptIds) SELECT 1,'蒋大华','1,2,3' UNION SELECT 2,'小明','1' UNION SELECT 3,'小华','' SELECT * FROM Employee <p><img alt src="http://img.558idc.com/uploadfile/allimg/210405/115010H93-0.jpg"></p>

希望得到的结果: