Select azure synapse 中的列值作为逗号分隔的字符串 sql 服务器
Select Column Values as Comma Separated String in 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 服务器上的 SQL 中工作正常,但相同的查询在 Synapse
中不起作用
Azure Synapse Analytics 不支持 FOR XML
,但支持 STRING_SPLIT
和 STRING_AGG
作为 table 函数。您的查询需要 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, 'Umesh', 'usc@yahoo.com'
UNION ALL
SELECT 3, 'Mahesh', 'msc@zyx.com';
SELECT someName, STRING_AGG( someEmail, ',' ) result
FROM #tmp
GROUP BY someName
我的结果:
这是我的要求
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 服务器上的 SQL 中工作正常,但相同的查询在 Synapse
中不起作用Azure Synapse Analytics 不支持 FOR XML
,但支持 STRING_SPLIT
和 STRING_AGG
作为 table 函数。您的查询需要 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, 'Umesh', 'usc@yahoo.com'
UNION ALL
SELECT 3, 'Mahesh', 'msc@zyx.com';
SELECT someName, STRING_AGG( someEmail, ',' ) result
FROM #tmp
GROUP BY someName
我的结果: