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

  • 相关阅读:
    PAT 1097. Deduplication on a Linked List (链表)
    PAT 1096. Consecutive Factors
    PAT 1095. Cars on Campus
    PAT 1094. The Largest Generation (层级遍历)
    PAT 1093. Count PAT's
    PAT 1092. To Buy or Not to Buy
    PAT 1091. Acute Stroke (bfs)
    CSS:word-wrap/overflow/transition
    node-webkit中的requirejs报错问题:path must be a string error in Require.js
    script加载之defer和async
  • 原文地址:https://www.cnblogs.com/gates/p/3585363.html
Copyright © 2011-2022 走看看