首页 > 数据库 >SQL2008 不用for xml 实现拼接字符串

SQL2008 不用for xml 实现拼接字符串

时间:2023-07-28 10:26:38浏览次数:40  
标签:xml tmp SQL2008 Sort UNION 拼接 GID StrCol SELECT

因为for xml有些特殊符号 不能作为分割符号,所以采用这种方式。如果是SQL2012的话 有自带的函数了

        
--测试数据    
IF OBJECT_ID('tempdb..#tmp_Orgdata') IS NOT NULL
    DROP TABLE #tmp_Orgdata
GO
--GID 分组ID STRCOL 字符串
SELECT GID,StrCol
INTO #tmp_Orgdata
FROM (
SELECT '1' AS GID, 'A' AS StrCol
UNION ALL
SELECT '1' AS GID, 'B' AS StrCol
UNION ALL
SELECT '1' AS GID, 'C' AS StrCol
UNION ALL
SELECT '2' AS GID, 'A' AS StrCol
UNION ALL
SELECT '2' AS GID, 'B' AS StrCol
) a
GO
--原始数据 只有两列 这里多生成排序字段,这里可以根据需要按自己的排序来

IF OBJECT_ID('tempdb..#tmp_data') IS NOT NULL
    DROP TABLE #tmp_data
GO
SELECT GID,StrCol,ROW_NUMBER()OVER(PARTITION BY GID ORDER BY StrCol) AS Sort
INTO #tmp_data
FROM #tmp_Orgdata
GO

--递归拼,拼后只显示最后一行
;WITH cte AS (
SELECT GID,MAX(CAST(CASE WHEN Sort=1 THEN ','+StrCol ELSE '' END  AS VARCHAR(MAX))) AS StrCol,MIN(Sort) AS MinSort,MAX(Sort) AS MaxSort, 0 AS Flag
FROM #tmp_data 
GROUP BY GID
UNION ALL  
SELECT a.GID,a.StrCol+','+b.StrCol,b.Sort,a.MaxSort,CASE WHEN a.MaxSort=b.Sort THEN 1 ELSE 0 END AS Flag
FROM cte a,#tmp_data b 
WHERE a.GID=b.GID AND a.MinSort+1=b.Sort
)
SELECT * FROM cte where Flag=1
ORDER BY cte.GID

 

标签:xml,tmp,SQL2008,Sort,UNION,拼接,GID,StrCol,SELECT
From: https://www.cnblogs.com/BTag/p/17586854.html

相关文章

  • Xml文件相关操作
    Xml文件相关操作C#中的XML是一种可扩展标记语言(ExtensibleMarkupLanguage),用于存储和交换数据。在C#中,我们可以使用内置的System.Xml命名空间来处理和操作XML数据。一、关键概念1.标签(Tags)XML使用标签来标识数据的起始和结束。标签由尖括号(<>)包围,可以包含标签名称和属性。......
  • AI面试官:Xml知多少
    AI面试官:Xml知多少目录AI面试官:Xml知多少1.什么是XML?它与HTML有何不同?2.XML的常见用途是什么?3.解释XML的基本结构4.XML和JSON有什么区别?它们在什么场景下更适用?5.如何解析XML文件并提取其中的数据?请用C#代码示例。6.什么是XMLSchema(XSD)?它在XML中的作用是......
  • Vue3多条数据复制功能,复制内容用逗号拼接
    <divclass="person-list"><divclass="person-item">9939939939399399</div><divclass="person-item">1111111111111111</div></div>&......
  • java xml解析
    JavaXML解析概述XML(eXtensibleMarkupLanguage)是一种常用的数据格式,广泛应用于数据交换和存储。在Java开发中,我们经常需要解析XML数据并将其转换为Java对象,或者将Java对象转换为XML格式。本文将介绍如何使用Java进行XML解析。流程可以通过以下步骤来实现JavaXML解析:步骤......
  • java xml点击按钮跳转页面
    JavaXML点击按钮跳转页面简介在Java应用程序中,我们经常需要创建用户界面来与用户交互。其中一种常见的方式是使用XML来定义界面布局,并在代码中处理用户的操作。本文将介绍如何使用Java和XML来创建按钮,并在用户点击按钮时跳转到另一个页面。准备工作在开始之前,我们需......
  • ABAP STRANS转换XML到EXCLE
    *&---------------------------------------------------------------------**&ReportZTEST00001*&---------------------------------------------------------------------**&*&---------------------------------------------------------------......
  • Python win11 安装lxml 失败
    如果你有一个项目执行了requirements后,一直提示lxml失败,解决步骤如下1、尝试升级pippython.exe-mpipinstall--upgradepip2、尝试下载包手动安装下载网址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml选择:lxml‑4.9.0‑cp311‑cp311‑win_amd64.whl3、python第三方......
  • PHP 中优雅的将JSON/XML/YAML 等数据反序列化成指定的类对象
    这个小事情何以需要记上一笔?实在是因为当用了各种编程语言以后,发现系统I/O处,尤其对外的接口Interface最重要,它或许可以被称为Specification,规约。PHP是混合型编程风格的语言,不强求完全的OOP。但是代码不OOP化的话,又得不到更多的开发工具的支持。尤其在PHP中如果只是用数组结......
  • xml声明式事务控制
    1、applicationContext.xml配置<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:contex......
  • MySQL group by分组后,将每组所得到的id拼接起来
    背景需要将商品表中的sku按照spu_id分组后,并且得到每个spu下的sku_id,需要使用到group_concat函数selectspu_id,count(*),group_concat(idSEPARATOR',')asidsfromproduct_skuwherecategory='tv'groupbyspu_id;group_concat函数group_concat函数,实现分组查......