SQLSERVER 字符型字段聚合

本文目的:将N行查询结果中的某列字符型内容聚合在一起。

SELECT DISTINCT TOP 50000 pom.billing_date,pom.production_no AS 工卡,pom.customer_name AS 客户,
    pom.cloth_no AS 布编号,pom.cloth_name AS 布种,pom.cust_section_no AS 客户款号,
    pom.color AS 颜色,pom.dye_no AS 色号,pom.zstrip AS 总条数,pom.zwkgs AS 总重量, dpp.procedure_name AS 工序--,dpp.myid   
    INTO #T
    FROM dbo.pro_outstore_detail pod WITH(NOLOCK)
    LEFT JOIN dbo.pro_outstore_master pom WITH(NOLOCK)  ON pod.invno = pom.invno
    LEFT JOIN dbo.dye_pro_master dpm WITH(NOLOCK) ON  pom.production_no=dpm.production_no
    LEFT JOIN dbo.dye_pro_process dpp WITH(NOLOCK) ON dpm.production_no = dpp.production_no    
    WHERE pom.billing_date>='2019-11-10' AND pom.billing_date<='2019-11-15' AND ISNULL(dpp.procedure_name,'')>''

 

--以上是结果集中间表

SELECT  工卡,客户,布编号,布种,客户款号,颜色,色号,总条数,总重量,STUFF((SELECT ','+[工序] FROM #T B  WHERE A.工卡=B.工卡 FOR XML PATH('')),1,1,'') AS 工序
FROM  #T A GROUP BY 工卡,客户,布编号,布种,客户款号,颜色,色号,总条数,总重量

--此语句起聚合作用

DROP TABLE #T

SQL Server 提供了多种用于字符串操作的聚合函数,这些函数可以用于对多行数据进行合并、拼接、提取等操作。以下是一些常用的字符聚合函数列表及其功能说明: ### 字符聚合函数列表 #### 1. `STRING_AGG` (SQL Server 2017 及更高版本) 该函数用于将多行中的字符串值合并为一个单一的字符串,并支持指定分隔符。常用于生成逗号分隔的列表或类似结构。 ```sql SELECT STRING_AGG(Name, ', ') AS ConcatenatedNames FROM Employees; ``` 此函数支持排序子句,允许在聚合前对值进行排序[^4]。 #### 2. `FOR XML PATH` 虽然这不是一个真正的聚合函数,但在 SQL Server 中广泛用于实现字符聚合的功能。通过 `FOR XML PATH` 方法,可以将多行数据合并为一个字符串,并且可以控制字段之间的分隔符。 ```sql SELECT STUFF(( SELECT ',' + Name FROM Employees FOR XML PATH('')), 1, 1, '') AS ConcatenatedNames; ``` 这种方法适用于 SQL Server 的多个版本,包括不支持 `STRING_AGG` 的早期版本[^1]。 #### 3. `CONCAT` / `CONCAT_WS` `CONCAT` 是用于连接两个或多个字符串值的标准函数,而 `CONCAT_WS`(With Separator)则允许指定一个分隔符来连接多个字符串。这两个函数主要用于列级别的字符串拼接,而非跨行聚合。 ```sql SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Employees; ``` 尽管它们不是传统意义上的聚合函数,但在某些情况下可用于构建聚合表达式。 #### 4. 自定义聚合函数 对于 SQL Server 2005 及以上版本,用户可以通过 .NET CLR 集成创建自定义的字符聚合函数。此外,也可以使用 `CREATE AGGREGATE` 命令结合用户自定义类型来实现更复杂的字符聚合逻辑。 ```sql -- 示例:假设已存在名为Concatenate的自定义聚合函数 SELECT dbo.Concatenate(Name) AS ConcatenatedNames FROM Employees; ``` 这种做法提供了更高的灵活性,适合处理复杂的数据聚合需求[^2]。 #### 5. `STRING_SPLIT` (仅限 SQL Server 2016 SP2 或更高版本) 虽然这是一个字符串拆分函数,但它通常与聚合函数一起使用,尤其是在需要将单个字段中的多个值拆分为单独行后再进行重新聚合的情况下。 ```sql SELECT value FROM STRING_SPLIT('apple,banana,orange', ','); ``` 它可以帮助开发者在处理存储为逗号分隔格式的数据时更加方便地进行分析和重组[^1]。 --- ### 总结 SQL Server 提供了多种方式来进行字符串操作和聚合,从内置的 `STRING_AGG` 到灵活的 `FOR XML PATH` 方法,再到自定义聚合函数,每种方法都有其适用场景和优势。根据实际需求选择合适的函数可以显著提升查询效率和代码可维护性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值