zoukankan      html  css  js  c++  java
  • [SQL Server]一列多行转换为字符串

    在 SQL Server 中,如何将多行数据变成一个字符串保存。

    skill
    投石
    挖矿
    刮痧
    上面三行数据想要得到结果为:投石,挖矿,刮痧

    有两种方式:

    • 拼接字符串。
    • 使用 for XML

    首先创建模拟用的数据

    IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
    	BEGIN
    		DROP TABLE #TempTable;
    	END
    CREATE TABLE #TempTable
    (
    	[name] VARCHAR(MAX),
    	[skill] VARCHAR(MAX)
    )
    INSERT INTO #TempTable VALUES('钟离','投石')
    INSERT INTO #TempTable VALUES('钟离','挖矿')
    INSERT INTO #TempTable VALUES('钟离','刮痧')
    INSERT INTO #TempTable VALUES('魈','舞蹈')
    INSERT INTO #TempTable VALUES('魈','插秧')
    INSERT INTO #TempTable VALUES('魈','个子矮')
    INSERT INTO #TempTable VALUES('可莉','超可爱')
    INSERT INTO #TempTable VALUES('可莉','超萌')
    INSERT INTO #TempTable VALUES('可莉','蹦蹦炸弹')
    
    --SELECT * FROM #TempTable
    

    1. 使用拼接方式

    DECLARE @skills varchar(MAX)
    SET @skills = ''  -- 用这种方式必须要初始化变量
    SELECT @skills = @skills + ',' + [skill] FROM #TempTable WHERE [name] = '钟离'
    SELECT @skills
    

    2. 使用 for XML

    SELECT ',' + [skill]
    FROM #TempTable
    WHERE [name] = '钟离'
    FOR XML PATH('')
    

    去掉开头的分隔符

    可以使用 left, right, stuff 函数去掉分隔符
    Stuff (@expression,@startIndex,@length,@replacrExpression)

    • @expression 表示 要处理的字符串
    • @startIndex 表示 开始删除字符串的位置(sql server索引从1而不是0开始)
    • @lenght 表示 删除字符串的长度
    • @replacrExpression  表示 删除后该位置 要替换的字符串
    SELECT STUFF(@skills, 1, 1, '')
    

    分组

    分组需要嵌套

    SELECT 
    	[name]
    	, STUFF(
    		(SELECT ',' + [skill]
    		FROM #TempTable A
    		WHERE A.[name] = B.[name]
    		FOR XML PATH(''))
    		,1
    		,1
    		,''
    	) AS [skills]
    FROM #TempTable B
    GROUP BY [name]
    

  • 相关阅读:
    计算panel的靶向区段长度
    interval的排序,合并,取样等功能
    Bait 和 target的区别
    R 数据拆分到列
    制作annovar注释依赖的cosmic数据库
    制作适用于annovar的COSMIC数据库
    痘痘机理
    属性、域、元组、关系、候选码、主键、外键、关系代数
    how to install emacs25 in ubuntu 14
    Centos Install Emacs
  • 原文地址:https://www.cnblogs.com/luciolu/p/14596606.html
Copyright © 2011-2022 走看看