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

  • 相关阅读:
    [LeetCode] Substring with Concatenation of All Words 解题报告
    [LeetCode] Symmetric Tree 解题报告
    [LeetCode] Unique Paths II 解题报告
    [LeetCode] Triangle 解题报告
    [LeetCode] Trapping Rain Water 解题报告
    [LeetCode] Text Justification 解题报告
    [LeetCode] Valid Sudoku 解题报告
    [LeetCode] Valid Parentheses 解题报告
    C++文件的批处理
    C++中两个类中互相包含对方对象的指针问题
  • 原文地址:https://www.cnblogs.com/gates/p/3585363.html
Copyright © 2011-2022 走看看