在 azure synapse sql server 中选择列值作为逗号分隔的字符串

问题描述

这是我的要求

Data

1 Umesh usc@gmail.com
2 Umesh usc@yahoo.com
3 Mahesh msc@zyx.com

Out put
1 Umesh usc@gmail.com,usc@yahoo.com
2 Mahesh msc@zyx.com

FOR XML 在 prim sql server 上的 sql 中运行良好,但相同的查询在 Synapse 中不起作用

解决方法

Azure Synapse Analytics 不支持 FOR XML,但支持 STRING_SPLITSTRING_AGG 作为表函数。您的查询需要 STRING_AGG。一个在专用 SQL 池上测试的简单示例:

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp;

CREATE TABLE #tmp (
    rowId           INT  PRIMARY KEY NONCLUSTERED NOT ENFORCED,someName        VARCHAR(50),someEmail       VARCHAR(50)
)
WITH
(
    DISTRIBUTION = ROUND_ROBIN,HEAP
);

INSERT INTO #tmp ( rowId,someName,someEmail )
SELECT 1,'Umesh','usc@gmail.com'
UNION ALL
SELECT 2,'usc@yahoo.com'
UNION ALL
SELECT 3,'Mahesh','msc@zyx.com';


SELECT someName,STRING_AGG( someEmail,',' ) result
FROM #tmp
GROUP BY someName

我的结果:

results