首页 > 解决方案 > 寻找在 Microsoft 分析平台系统上模拟 LISTAGG(STRING_AGG) 的有效方法

问题描述

我的任务是将一些Oracle SQL迁移到Microsoft 的分析平台系统上。

原始Oracle代码基本如下:

SELECT MyID,TO_CHAR(LISTAGG(ListValue)) MyValue
FROM MyTable
GROUP BY MyID

STRING_AGG即使在最新版本中也不支持,也没有任何常用的方法来实现这一点。

有任何想法吗?

标签: sqlsql-servertsql

解决方案


如果您使用的是更高版本,则可以使用STRING_AGG()

SELECT MyID, STRING_AGG(ListValue, ',') AS MyValue
FROM MyTable
GROUP BY MyID;

但是,同样可以使用较旧的 xml 方法来实现,并帮助低版本的 SQL。

SELECT MyID, STUFF ( (SELECT ', ' +CAST(t1.ListValue AS VARCHAR(255)) -- Neglate conversion if unnecessary 
                      FROM MyTable t1
                      WHERE t1.MyID = t.MyID
                      FOR XML PATH('')
                      ), 1, 1, ''
                   ) AS MyValue
FROM MyTable t
GROUP BY MyID;

推荐阅读