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

  • 相关阅读:
    项目开发管理SDEM
    google安装文件 和 缓存位置:
    数据库 查询超时 运行超时 问题
    将Access、Excel数据导出到MSSQL/使用 OpenRowSet 和 OpenDataSource 访问 Excel 97-2007
    Mybatis日志(七)
    Mybatis拦截器(六)
    Mybatis动态SQL(五)
    Mybatis的XML映射文件(四)
    Mybatis全局配置文件详解(三)
    Mybatis环境搭建(二)
  • 原文地址:https://www.cnblogs.com/gates/p/3585363.html
Copyright © 2011-2022 走看看