gpt4 book ai didi

sql - SQLSERVER 中的 ListAGG

转载 作者:行者123 更新时间:2023-12-01 17:29:21 29 4
gpt4 key购买 nike

我正在尝试聚合 SQLServer 中的“STRING”字段。我想找到与 Oracle 中相同的函数 LISTAGG 。

您知道如何执行相同的功能或其他方法吗?

例如,

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

我希望这个查询的结果是

1 | AB
2 | A

最佳答案

MySQL

SELECT FieldA
, GROUP_CONCAT(FieldB ORDER BY FieldB SEPARATOR ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;

Oracle 和 DB2

SELECT FieldA
, LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;

PostgreSQL

SELECT FieldA
, STRING_AGG(FieldB, ',' ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;

SQL 服务器

SQL Server ≥ 2017 和 Azure SQL

SELECT FieldA
, STRING_AGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;

SQL Server ≤ 2016(包含 CTE 是为了鼓励 DRY principle )

  WITH CTE_TableName AS (
SELECT FieldA, FieldB
FROM TableName)
SELECT t0.FieldA
, STUFF((
SELECT ',' + t1.FieldB
FROM CTE_TableName t1
WHERE t1.FieldA = t0.FieldA
ORDER BY t1.FieldB
FOR XML PATH('')), 1, LEN(','), '') AS FieldBs
FROM CTE_TableName t0
GROUP BY t0.FieldA
ORDER BY FieldA;

SQLite

排序需要 CTE 或子查询

  WITH CTE_TableName AS (
SELECT FieldA, FieldB
FROM TableName
ORDER BY FieldA, FieldB)
SELECT FieldA
, GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM CTE_TableName
GROUP BY FieldA
ORDER BY FieldA;

无需订购

SELECT FieldA
, GROUP_CONCAT(FieldB, ',') AS FieldBs
FROM TableName
GROUP BY FieldA
ORDER BY FieldA;

关于sql - SQLSERVER 中的 ListAGG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477743/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com