需要帮助将以下查询从 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