zoukankan      html  css  js  c++  java
  • 分解字符串包含的信息值后然后合并到另外一表的信息

    分解字符串包含的信息值后然后合并到另外一表的信息

    http://www.cnblogs.com/jiajiayuan/archive/2011/08/08/2131120.html

    /*问题描述

    tba

    ID classid   name

    tbb 1     1,2,3   西服 2     2,3     中山装3     1,3     名裤

    id   classname

    1     衣服

    2     上衣

    3     裤

    我得的结果是

    id   classname            name

    1     衣服,上衣,裤子      西服

    2     上衣,裤子          中山装

    3     衣服,裤子          名裤

    */

    -----------------------------------------------------

    --sql server 2000中的写法

    create table tba(ID int,classid varchar(20),name varchar(10))

    insert into tba values(1,'1,2,3','西服')

    insert into tba values(2,'2,3' ,'中山装')

    insert into tba values(3,'1,3' ,'名裤')

    create table tbb(ID varchar(10), classname varchar(10))

    insert into tbb values('1','衣服')

    insert into tbb values('2','上衣')

    insert into tbb values('3','裤子')

    go

    --第1种方法,创建函数来显示

    create function f_hb(@id varchar(10))

    returns varchar(1000)

    as

    begin

     declare @str varchar(1000)

     set @str=''

     select @str=@str+','+[classname] from tbb where charindex(','+cast(id as varchar)+',',','+@id+',')>0

     return stuff(@str,1,1,'')

    end

    go

    select id,classid=dbo.f_hb(classid),name from tba

    drop function f_hb

    /*

    id          classid       name      

    ----------- ------------- ----------

    1           衣服,上衣,裤子 西服

    2           上衣,裤子      中山装

    3           衣服,裤子      名裤

    (所影响的行数为 3 行)

    */

    --第2种方法.update

    while(exists (select * from tba,tbb where charindex(tbb.id,tba.classid) >0))

    update tba

    set classid= replace(classid,tbb.id,tbb.classname)

    from tbb

    where charindex(tbb.id,tba.classid)>0

    select * from tba

    /*

    ID          classid              name      

    ----------- -------------------- ----------

    1           衣服,上衣,裤子       西服

    2           上衣,裤子            中山装

    3           衣服,裤子            名裤

    (所影响的行数为 3 行)

    */

    drop table tba,tbb

    ------------------------------------------------------------------------

    --sql server 2005中先分解tba中的classid,然后再合并classname

    create table tba(ID int,classid varchar(20),name varchar(10))

    insert into tba values(1,'1,2,3','西服')

    insert into tba values(2,'2,3' ,'中山装')

    insert into tba values(3,'1,3' ,'名裤')

    create table tbb(ID varchar(10), classname varchar(10))

    insert into tbb values('1','衣服')

    insert into tbb values('2','上衣')

    insert into tbb values('3','裤子')

    go

    SELECT id , classname , name FROM

    (

     SELECT DISTINCT id , name FROM (select tbc.id , tbc.name , tbb.classname from

      (

        SELECT A.id , A.name , B.classid FROM(SELECT id , name , [classid] = CONVERT(xml,'<root><v>' +REPLACE([classid], ',', '</v><v>') + '</v></root>') FROM tba)A

        OUTER APPLY(SELECT classid = N.v.value('.', 'varchar(100)') FROM A.[classid].nodes('/root/v') N(v))B

     ) tbc , tbb where tbc.classid = tbb.id

     ) T

    )A

    OUTER APPLY

    (

     SELECT [classname]= STUFF(REPLACE(REPLACE((

        SELECT classname FROM (select tbc.id , tbc.name , tbb.classname from

        (

          SELECT A.id , A.name , B.classid FROM(SELECT id , name , [classid] = CONVERT(xml,'<root><v>' +REPLACE([classid], ',', '</v><v>') + '</v></root>') FROM tba)A

          OUTER APPLY(SELECT classid = N.v.value('.', 'varchar(100)') FROM A.[classid].nodes('/root/v') N(v))B

        ) tbc , tbb where tbc.classid = tbb.id

     ) N

     WHERE id = A.id and name = A.name

     FOR XML AUTO), '<N classname="', ','), '"/>', ''), 11, '')

    )N

    order by id

    drop table tba,tbb

    /*

    id          classname      name

    ----------- -------------- ----------

    1           衣服,上衣,裤子 西服

    2           上衣,裤子      中山装

    3           衣服,裤子      名裤

    (3 行受影响)

    */

  • 相关阅读:
    ORA-39126 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]中Worker发生意外致命错误
    C# 9 新特性 —— 增强的 foreach
    在 xunit 测试项目中使用依赖注入
    gitee.com 码农中添加私有仓库并通过ssh链接
    强化学习 —— reinforce算法中更新一次策略网络时episodes个数的设置对算法性能的影响 —— reinforce算法中迭代训练一次神经网络时batch_size大小的不同设置对算法性能的影响
    如何在 Ubuntu18.04 server 服务器版本的操作系统下 配置IP
    东北某海滨城市的某高校的某分校区的校园网登录程序,(python3, 模拟浏览器的登入方式)
    强化学习中经典算法 —— reinforce算法 —— (进一步理解, 理论推导出的计算模型和实际应用中的计算模型的区别)
    【转载】 Linux 设置CPU Performance模式
    深度学习中使用TensorFlow或Pytorch框架时到底是应该使用CPU还是GPU来进行运算???
  • 原文地址:https://www.cnblogs.com/kittyguo/p/11549819.html
Copyright © 2011-2022 走看看