zoukankan      html  css  js  c++  java
  • 列的分拆显示

    create table ta(id int, name varchar(50))
    insert ta
    select 1,           'aa,bb'
    union all select 2,           'aaa,bbb,ccc'
    union all select 3,           'Aa,Bb,Cc,Dd'


    方法1通过游标实现:

    declare @tb table(id int, name varchar(50))--用表变量显示效果
    DECLARE @id int,@name varchar(50)
    DECLARE roy CURSOR
    FOR SELECT * from ta
    OPEN roy
    FETCH next FROM roy
    into @id,@name
    WHILE @@FETCH_STATUS = 0
    BEGIN
        while CHARINDEX(',',@name)>0
            begin
                INSERT   @tb  select @id,LEFT(@name,CHARINDEX(',',@name)-1)
                SET      @name=STUFF(@name,1,CHARINDEX(',',@name),'')  
            end
            insert @tb select @id,@name
            FETCH NEXT FROM roy into @id,@name
    end
    CLOSE roy
    DEALLOCATE roy
    select * from @tb

    方法2用表变量:
    declare @ta table(id int)--生成1—50递增的表变量
    declare @i int,@j int
    select @i=1,@j=50--定义字符的最大数量
    while @i!>@j
        begin
            insert @ta select @i
            select @i=@i+1
        end
    select a.id,
          显示列=substring(a.name,b.id,charindex(',',a.name+',',b.id)-b.id)
    from ta a,@ta b
    where substring(','+a.name,b.id,1)=','

    效果如下:


    id          name             
    ----------- ------------------
    1           aa
    1           bb
    2           aaa
    2           bbb
    2           ccc
    3           Aa
    3           Bb
    3           Cc
    3           Dd

    (所影响的行数为 9 行)

    --drop table ta

  • 相关阅读:
    TREEVIEW拖拽对应修改目录
    shell脚本总结
    Linux将程序添加到服务的方法(通用【但最好还是用systemd】)
    Git客户端命令总结
    如何设置vim中tab键缩进---配置初始化设置
    在终端上创建Java项目及编译和运行
    Linux下Git安装及配置
    如何在eclipse的配置文件里指定jdk路径
    Redis总结和提取常用的和重要的命令
    Redis为什么是单线程
  • 原文地址:https://www.cnblogs.com/Roy_88/p/5463115.html
Copyright © 2011-2022 走看看