寻找一种在Microsoft Analytics Platform System上模拟LISTAGG(STRING_AGG)的有效方法

时间:2018-06-27 10:02:06

标签: sql sql-server tsql

我的任务是将一些 Oracle SQL 迁移到 Microsofts Analytics Platform System

原始的Oracle代码基本上如下:

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

STRING_AGG甚至在最新版本中也不被支持,并且没有任何一种通常的方法可以实现这一目的。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用的是更高版本,则可以使用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;