【问题标题】:Corresponding GROUP_CONCAT() in SQL SERVER 2017 [duplicate]SQL SERVER 2017 中对应的 GROUP_CONCAT() [重复]
【发布时间】:2020-03-09 08:30:35
【问题描述】:

我想将以下 MYSQL 查询转换为 MS SQL Server。但是,我确信GROUP_CONCAT 在 2017 年之前的 MS SQL Server 中不存在。SQL SERVER 2017 中有一个函数。有人可以帮我吗?

SELECT region, GROUP_CONCAT(route_name) AS route_name 
FROM route_details 
LEFT JOIN ride_details ON route_id = r_id 
WHERE region != '' AND service_date = '2019-09-02' 
GROUP BY region

【问题讨论】:

    标签: sql sql-server string tsql string-aggregation


    【解决方案1】:

    你想要string_agg()。语法有点不同(通常,分隔符是强制性的,而在 MySQL 中默认为 ,,而 SQLServer 需要 within grouporder by ):

    SELECT region, STRING_AGG(route_name, ',') AS route_name 
    FROM route_details 
    LEFT JOIN ride_details ON route_id = r_id 
    WHERE region != '' AND service_date = '2019-09-02' 
    GROUP BY region
    

    【讨论】:

    • 当我执行上述查询时,它显示以下错误 STRING_AGG 聚合结果超出了 8000 字节的限制。使用 LOB 类型来避免结果截断。
    • 只需将 route_name 包装在转换函数中。转换(varchar(max), route_name)
    • 也许 GMB 意味着语法不同,而不是拼写,@SeanLange ? ??‍♂️
    • @Larnu 因此我很困惑....在 OP 或此代码中没有顺序。并且 AFAIK ORDER BY 的语法在 sql server 和 mysql 中是相同的。不管怎样,这就是解决方案。
    • 啊,我现在明白你在说什么了。感谢您的澄清,我真的很摸不着头脑。
    猜你喜欢
    • 2012-02-15
    • 2012-02-10
    • 2013-10-07
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多