看到个不常见的问题~然后在 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╰)╮

将一列包含多个ID拆分多行的更多相关文章

  1. 现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,名为buyer_favorite1。 buyer_favorite1包含:买家id,商品id,收藏日期这三个字段,数据以“\t”分割

    实验内容(mapReduce安装请按照林子雨教程http://dblab.xmu.edu.cn/blog/631-2/) 现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,名为 ...

  2. Sql Server 数据把列根据指定的内容拆分数据

    今天由于工作需要,需要把数据把列根据指定的内容拆分数据 其中一条数据实例 select id , XXXX FROM BIZ_PAPER where  id ='4af210ec675927fa016 ...

  3. EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............

    EL表达式处理字符串 是否 包含 某字符串 截取 拆分............... JSP页面页头添加<%@ taglib uri="/WEB-INF/taglib/c.tld&qu ...

  4. SqlServer 行转列,列转行 以及PIVOT函数快速实现行转列,UNPIVOT实现列转行

     一   .列转行 创建所需的数据 CREATE TABLE [StudentScores]( [UserName] NVARCHAR(20), --学生姓名 [Subject] NVARCHAR(3 ...

  5. MO拆分计划行程序中写入PRODUCTIONORDERS表数据出现重复导致报错(BUG)20180502

    错误提示:ORA-00001: 违反唯一约束条件 (ABPPMGR.C0248833319_6192)ORA-06512: 在 "STG.FP_MO_SPLIT", line 19 ...

  6. mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?

    mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...

  7. 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

    为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...

  8. 给包含compid列且值为null ,表的行数据赋值--

    IF OBJECT_ID ('dbo.spSelectColValue_In_DB') IS NOT NULL DROP PROCEDURE dbo.spSelectColValue_In_DB go ...

  9. 表x有 一列 ,程序每次生成id的时候都先从这里获取最大值再加1,初始值是A0001,然后到A9999的时候则是到B0001 共5位

    drop table x gocreate table x(id varchar(10))--insert into x values('A001')gowith a as (select ISNUL ...

随机推荐

  1. 使用PackageManager获得应用(包)信息

    PackageManager是Android中一个很有用的类,能够获取已安装的应用(包)的信息,如应用名称.图标.权限,安装.删除应用(包)等. 以下代码可以获得已安装应用(包)的信息: // 包管理 ...

  2. TSwitch 中文简繁显示支持(XE6 Android)

    说明: XE6 的 TSwitch 做了很多改进,包含多语显示处理,但 XE6 似乎只认定一种中文语系「zh」,它无法处理「zh_TW」.「zh_CN」.「zh_HK」.「zh_SG」等语系,不过可以 ...

  3. LoadRunner上传及下载文件

    (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/cons ...

  4. get()和post()方法编码的区别

    在做ssh搭建的框架中,在后台条件查询的时候,组合查询传到后台的值一直是乱码,其中在form表单中必须要加上method,这一点是肯定的,但是加上了提交的方式之后,会出现如下问题: 如果使用get方法 ...

  5. js的一些属性

    js attribute(): setAttribute():element.setAttribute(name,balue) getAttribute():element.getAttribute( ...

  6. go语言 类型:布尔类型

    Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会 ...

  7. 从0开始学angularjs-笔记03

    大家好,今天上班第一天,可能大家都不是很想上班吧,我也是一样啦---不想上班就来继续写我的angualrjs教程,造福大家吧!! 今天的主要讲解部分有以下几点:1.演示一个完整的项目结构  2.$sc ...

  8. jQuery的document ready与 onload事件——你真的思考过吗?

    在进行实验和资料查询时,我遇到了几个关键问题: 1. window.onload到底是什么加载完触发? 2. body为什么会有onload事件? 3. 为什么是window.onload,而不是do ...

  9. windows.open()、close()方法详解

    windows.open()方法详解:         window.open(URL,name,features,replace)用于载入指定的URL到新的或已存在的窗口中,并返回代表新窗口的Win ...

  10. [Android]RapidFloatingActionButton框架正式出炉

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4474748.html RapidFloatingActionB ...