zoukankan      html  css  js  c++  java
  • SQLServer 中多行数据合并成一行数据(一个字段)

      需求:有四行数据,如下:

      1.苹果
      2.橘子
      3.桃子
      4.波罗

      合并成一个字段:苹果,橘子,桃子,波罗;

      需求明确之后,先弄点测试数据,上代码:

      

    --创建一个临时表
    Create table #temp
    (
        testName varchar(20)
    )
    
    --写入测试数据
    INSERT INTO #temp(testName) values('苹果');
    INSERT INTO #temp(testName) values('橘子');
    INSERT INTO #temp(testName) values('桃子');
    INSERT INTO #temp(testName) values('波罗');
    
    --查询写入的数据
    SELECT * FROM #temp
    --DELETE #temp

    演示数据填充好了之后,我们可以有以下几种方法实现需求:

    一:

    DECLARE @listStr VARCHAR(MAX);
    SELECT @listStr = ISNULL(@listStr+',','')+ testName
    FROM #temp
    SELECT @listStr

    在上面的脚本代码中,使用了ISNULL函数,也可以使用Coalesce函数,这两个函数都有空值情况下处理字符串的功能,更深层次的区别参考这里

    那么问题来了,我为什么要使用ISNull或者Coalesce 函数呢?这是因为所有的数据行中如果不排除有空值的可能,最好加上空值判断的处理,因为在SQLSERVER中,如果需要进行字符串拼接,遇到空值的话是无法拼接的。

    二:使用for xml path('') 和stuff ;

        SELECT ',' + testName 
        FROM #temp for xml path('')

    三:使用字符串函数 STRING_AGG,这个函数是SQLSERVER 2017 之后才有的。

    SELECT STRING_AGG(ISNULL(testName,'N/A'), ',') 
    FROM #temp

    查询结果为:苹果,橘子,桃子,N/A,波罗
  • 相关阅读:
    Java之CyclicBarrier使用
    HashMap,LinkedHashMap,TreeMap的区别
    阿里巴巴常考面试题及汇总答案
    HashTable, HashMap,TreeMap区别
    Java集合类详解
    java代码的几个utils,基本可以直接用
    adb控制手机屏幕滑动(批处理)
    在设备上启用 adb 调试,有一个小秘密
    python clickZan
    python控制鼠标键盘
  • 原文地址:https://www.cnblogs.com/Rawls/p/10758788.html
Copyright © 2011-2022 走看看