微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要帮助将以下查询从 My SQL 转换为 MS SQL Group_Concat 函数

如何解决需要帮助将以下查询从 My SQL 转换为 MS SQL Group_Concat 函数

我需要帮助将以下查询从我的 sql 转换为 MS sql

SELECT 
            md.ID AS `ID`,t1.Name AS `Name`,group_concat(IF(t2.Column3 = 'Value1',t1.Value,NULL)) AS `Value1`,group_concat(IF(t2.Column3 = 'Value2',NULL)) AS `Value2`,group_concat(IF(t2.Column3 = 'Value3',NULL)) AS `Value3`
            FROM Table1 t1
            LEFT JOIN Table2 AS t2 ON t1.Column1 = t2.Column1
            GROUP BY t1.Id  ;

解决方法

从 SQL Server 2017 开始,您可以使用 STRING_AGG(expression,',') 代替 GROUP_CONCAT(expression)。对于旧版本,似乎有几种方法可以做到(包括安装 GROUP_CONCAT 函数),但都没有我对 SQL Server 有足够的了解;请参阅该问题中的 Simulating group_concat MySQL function in Microsoft SQL Server 2005? 和链接。

并且您可以使用 CASE WHEN ... THEN ... ELSE ... END(如果 else 结果为 NULL,则也可以仅使用 CASE WHEN ... THEN ... END)代替 IF(...,...,...)。 CASE 在 mysql 中也有效。

但是您需要按 t1.Name 分组或选择类似 MAX(t1.Name) 的内容,因为您不能使用未分组的非聚合列(就像您不能在现代版本中一样mysql 使用现代默认设置)。

fiddle

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。