首页 > 解决方案 > 需要帮助将以下查询从 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',   t1.Value, NULL)) AS `Value2`,
            group_concat(IF(t2.Column3 = 'Value3',   t1.Value, NULL)) AS `Value3`
            FROM Table1 t1
            LEFT JOIN Table2 AS t2 ON t1.Column1 = t2.Column1
            GROUP BY t1.Id  ;

标签: mysqlsql-servergroup-concat

解决方案


从 SQL Server 2017 开始,您可以STRING_AGG(expression, ',')代替. GROUP_CONCAT(expression)请参阅在 Microsoft SQL Server 2005 中模拟 group_concat MySQL 函数?以及该问题中的链接。

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

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

小提琴


推荐阅读