将一列包含多个ID拆分多行

简介: 原文:将一列包含多个ID拆分多行看到个不常见的问题~然后在 Inner Sql Server2008 里面找到一个思路。 如果下面的表结构,如何拆分多行并对应员工号呢?     首先创建测试表 CREATE TABLE Department ( ID INT IDEN...
原文: 将一列包含多个ID拆分多行

看到个不常见的问题~然后在 Inner Sql Server2008 里面找到一个思路。

如果下面的表结构,如何拆分多行并对应员工号呢?

 

 

首先创建测试表

CREATE TABLE Department
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    DepartmentName VARCHAR(50) NULL,
    Members NVARCHAR(500) NULL
)

CREATE TABLE Employee
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    NAME NVARCHAR(50) NULL
)
INSERT INTO Department VALUES
('行政','1,3,5,10,12'),('销售','42,23,35,40,22'),('市场','13,17,27,28,43')
SELECT * FROM dbo.Department
 

 

Employee 表的数据直接用个 Sql Generator生成一下下就好了~
--然后搞个数字辅助表作备用
CREATE TABLE #Num (ID INT)
INSERT INTO #Num
        ( ID )
SELECT TOP 500 ROW_NUMBER() OVER (ORDER BY (SELECT 1))
 FROM sys.objects a,sys.objects b

 

 

--为了方便看代码,用个CTE来写。
;WITH CTE1 AS (SELECT a.ID, a.DepartmentName, a.Members, b.ID AS Pos, CHARINDEX(',',a.Members,b.ID) AS NextSplit FROM dbo.Department a INNER JOIN #Num b ON SUBSTRING(',' + a.Members,b.ID,1) = ',' AND b.ID <= LEN(a.Members) ), CTE2 AS (SELECT ID,DepartmentName, CASE WHEN NextSplit <> 0 THEN SUBSTRING(Members,Pos,NextSplit - Pos) ELSE RIGHT(Members,LEN(Members) - Pos + 1) END AS EmployeeID FROM CTE1) SELECT a.* ,b.NAME FROM CTE2 a INNER JOIN dbo.Employee b ON a.EmployeeID = b.ID


 

 

PS: 上述语句其实优化空间是很大的,这里只是提供给一个方法~就暂时不纠结效率上罗~╭(╯3╰)╮

 

目录
相关文章
|
30天前
|
SQL 关系型数据库 MySQL
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
Mysql数据库一个表字段中存了id,并以逗号分隔,id对应的详细信息在另一个表中
10 0
|
3月前
|
SQL C++
组合两个表(C++)
组合两个表(C++)
19 0
|
4月前
|
SQL 关系型数据库 MySQL
SQL编程【MySQL 01】拆分列字段为行并根据类型翻译字段 > 1305 - FUNCTION x.help_topic_id does not exist 报错问题
SQL编程【MySQL 01】拆分列字段为行并根据类型翻译字段 > 1305 - FUNCTION x.help_topic_id does not exist 报错问题
36 0
|
4月前
|
JSON API 开发者
如何使用分类ID参数过滤搜索词推荐数据?
一、背景介绍 阿里巴巴中国站的搜索词推荐数据对于开发者来说具有重要的参考价值。通过使用获得搜索词推荐 API,开发者可以获取到用户在平台上的搜索行为数据,了解用户的需求和行为,优化产品和服务。在获取搜索词推荐数据的过程中,有时候需要对数据进行更精细的过滤和分析。其中,分类ID参数是一个非常重要的过滤条件,可以帮助开发者更好地筛选数据。本文将详细介绍如何使用分类ID参数过滤搜索词推荐数据,帮助读者更好地理解和使用该 API。
|
10月前
|
JSON 前端开发 数据格式
根据ID集合查询符合某种类型的用户信息,并按其他类型分类
根据ID集合查询符合某种类型的用户信息,并按其他类型分类
|
存储 缓存 NoSQL
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
分布式ID(唯一性)的生成方法汇总
|
关系型数据库 索引
ES中通过join类型字段构建父子关联
ES中通过join类型字段构建父子关联
364 0
ES中通过join类型字段构建父子关联
|
存储 关系型数据库 MySQL
type列详解及案例分析
Explain 命令中的 type 列,显示MySQL查询所使用的 关联类型(Join Types) 或者 访问类型,它表明 MySQL决定如何查找表中符合条件的行。 常见访问类型性能由最差到最优依次为:ALL < index < range < index_subquery < unique_subquery < index_merge < ref_or_null < fulltext < ref < eq_ref < const < system。
|
SQL 算法 测试技术
Guid算法与标识列(自动增长字段)在表中的应用
Guid算法与标识列(自动增长字段)在表中的应用
146 0
Guid算法与标识列(自动增长字段)在表中的应用
在S/4HANA扩展字段的Available Fields列表里,看不到自己创建的扩展字段该怎么办
I have created one extension field on Business context “Product Master General” in tile “Custom Field and Logic” and publish it:
在S/4HANA扩展字段的Available Fields列表里,看不到自己创建的扩展字段该怎么办