zoukankan      html  css  js  c++  java
  • 将一列包含多个ID拆分多行

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

    首先创建测试表

    复制代码
    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╰)╮

  • 相关阅读:
    phpexcel 字符串转码
    thinkphp 3.2 linux二级目录安装
    linux 系统、命令、软件
    thinkphp3.2和phpexcel导入
    苹果手机微信分享代码失效
    thinkphp3.2与phpexcel带图片生成 完美案例
    thinkphp3.2与phpexcel基础生成
    thinkphp 3.2加载类
    thinkphp 3.2与phpexcel
    thinkphp 导出exl功能
  • 原文地址:https://www.cnblogs.com/hyshareex/p/3999467.html
Copyright © 2011-2022 走看看