SQLSERVER 中的 ListAGG

ListAGG in SQLSERVER(SQLSERVER 中的 ListAGG)
本文介绍了SQLSERVER 中的 ListAGG的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 SQLServer 中聚合一个STRING"字段.我想在 Oracle 中找到与 LISTAGG 相同的函数.

I'm trying to aggregate a 'STRING' field in SQLServer. I would like to find the same function LISTAGG like in Oracle .

你知道如何做同样的功能或另一种方法吗?

Do you know how to do the same function or an another method?

例如

Field A | Field B
1       |  A
1       |  B
2       |  A

我希望这个查询的结果是

And I would like that the result of this query will be

1 | AB
2 | A

推荐答案

从 SQL Server 2017 STRING_AGG 函数可用,大大简化了逻辑:

Starting in SQL Server 2017 the STRING_AGG function is available which simplifies the logic considerably:

select FieldA, string_agg(FieldB, '') as data
from yourtable
group by FieldA

参见SQL Fiddle with Demo

在 SQL Server 中,您可以使用 FOR XML PATH 来获取结果:

In SQL Server you can use FOR XML PATH to get the result:

select distinct t1.FieldA,
  STUFF((SELECT distinct '' + t2.FieldB
         from yourtable t2
         where t1.FieldA = t2.FieldA
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,0,'') data
from yourtable t1;

参见SQL Fiddle with Demo

这篇关于SQLSERVER 中的 ListAGG的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)