将一列包含多个ID拆分多行
2014-09-29 08:54
134 查看
如果下面的表结构,如何拆分多行并对应员工号呢?
首先创建测试表
PS: 上述语句其实优化空间是很大的,这里只是提供给一个方法~就暂时不纠结效率上罗~╭(╯3╰)╮
首先创建测试表
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╰)╮
相关文章推荐
- 将一列包含多个ID拆分多行
- 将一列包含多个ID拆分多行
- 将一列包含多个ID拆分多行
- hive一行数据中一列拆分成多行
- hive一行数据中一列拆分成多行
- hive一行数据中一列拆分成多行
- 【数据平台】pandas将一列中的文本拆分成多行
- 有一个帐号类,包含有(id、用户名和密码),编写程序使用List接口来存储多个帐号对象,注意id是自动生成(规则是为List中所有帐号中最大的id再加1)
- Pandas: 如何将一列中的文本拆分为多行? | Python
- mySQL字符串处理之一个字段包含多个ID的解决
- Excel中如何将一个Excel工作表的数据按一列的关键字拆分成多个工作表
- oracle ebs 拆分一列为多行的问题
- SQL Server将相同id的另一列的多行内容拼接成一行
- sql查询find_in_set,字段包含多个ID,并用逗号分开,查询该字段是否包含某个ID
- 一列转多行--拆分列值
- iOS点击状态栏回到顶部(一个控制器中包含多个scrollview,系统自带的回到顶部失效)
- 找到多个具有相同 ID“_header”的控件。FindControl 要求控件具有唯一的 ID。错误的解决方法!
- 五、Django项目中包含多个应用时对url的配置
- excel导出数据很多,拆分成多个,以Excel的方式导出
- SQL技巧(多行合并一列)