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]
    

  • 相关阅读:
    程序员优化程序流程
    iOS开发优化的25个方案
    彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题转
    svn服务器搭建与配置
    mac 显示隐藏文件夹
    HDU 2276 Kiki & Little Kiki 2 矩阵构造
    HDU 3306 Another kind of Fibonacci ---构造矩阵***
    HDU 1575 Tr A----矩阵相乘题。
    矩阵的模板----
    HDU 1757 矩阵求第n的递推式
  • 原文地址:https://www.cnblogs.com/luciolu/p/14596606.html
Copyright © 2011-2022 走看看