zoukankan      html  css  js  c++  java
  • 【原】sql 将某列拼成一个字符串

    SQL Server中,写存储过程,时常会碰到这样一个需求:从某个表中取某一列,然后需要将这一列数据以某种形式拼成一个字符串,以供后面使用,下面这种方法能够实现此需求。

    1 --取说明书模块枚举,结果格式为:'dmtContraindication|dmtAttentionDesc|'
    2 declare @enumArray varchar(max) 
    3 set @enumArray='' 
    4 select @enumArray=@enumArray+cast( t.DrugFieldContrast_Enum as varchar(MAX)) +'|'
    5 from DrugFieldContrast t

    对拼接前的这一列循环处理,

    declare @i int
    declare @Uenum varchar(Max) --模块枚举名
    declare @UenumID varchar(Max) --模块枚举ID
    
    while Len(@enumArray)>0
    begin
        SELECT @i = Charindex('|',@enumArray)--获取截取分割符号位置
        if (@i>0)
        begin
            Set @Uenum = SUBSTRING(@enumArray , 1 , @i-1 )--获取枚举
            Set @UenumID = SUBSTRING(@enumArrayID , 1 , 36 )--获取枚举ID
            print @Uenum 
            print @UenumID
            if(@Uenum = 'dosage')--dosage处理开始
            begin
            ...
            end--处理结束
            else
            begin
            ...
            end
        end --if结束
        
        set @enumArray = SUBSTRING ( @enumArray, @i+1 , len(@enumArray)-@i )--从原字符串里删除刚才分割出来的字符串
        set @enumArrayID = SUBSTRING ( @enumArrayID, 38 , len(@enumArrayID)-36 )--从原字符串里删除刚才分割出来的字符串
    end     --while结束

    如果想把多行的某两列组合成一个字符串并且再和其他行拼接成一个大字符串,可以用如下方法

    SELECT 药品名称,药品ID,    (SELECT 药品名称+类型+',' FROM 表1 WHERE 药品ID=A.药品ID FOR XML PATH('')) AS 类型s
    FROM 表1 A
    GROUP BY 药品名称,药品ID

    SELECT 药品名称,药品ID,    (SELECT 类型+',' FROM 表1 WHERE 药品ID=A.药品ID FOR XML PATH('')) AS 类型s
    FROM 表1 A
    GROUP BY 药品名称,药品ID

    select * FROM 表1

  • 相关阅读:
    [dll注入实现IAT勾取] 计算器显示中文
    [记事本API Hook] 调试器 勾取 WriteFile()Api
    [DLL注入的方法]进程创建期修改PE输入表法
    [DLL注入的方法]静态修改PE输入表法
    [1]编程实现加载驱动
    [保护模式]测试一致代码段
    [保护模式]联系1 三环访问高2G
    15.[保护模式]TSS任务门
    ERP中HR模块的操作与设计--开源软件诞生26
    ERP的主数据的操作与设计--开源软件诞生25
  • 原文地址:https://www.cnblogs.com/gates/p/3585363.html
Copyright © 2011-2022 走看看