【问题标题】:Select Column Values as Comma Separated String in azure synapse sql server在 azure synapse sql server 中选择列值作为逗号分隔字符串
【发布时间】:2021-07-28 17:06:30
【问题描述】:

这是我的要求

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 中不运行

【问题讨论】:

    标签: sql azure-sql-database azure-synapse


    【解决方案1】:

    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, 'Umesh', 'usc@yahoo.com'
    UNION ALL
    SELECT 3, 'Mahesh', 'msc@zyx.com';
    
    
    SELECT someName, STRING_AGG( someEmail, ',' ) result
    FROM #tmp
    GROUP BY someName
    

    我的结果:

    【讨论】:

    • 完美!我很高兴 MSFT 提前考虑了如果他们要删除一个功能,他们会以另一种方式添加它!
    • 我一直认为连接字符串的 xml 技巧有点像 hack,所以我很高兴现在有一种正确的方法。赞一个@Sauron 怎么样? :)
    • @wBob 已经做了 BOBBY!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多