【问题标题】:Need help to convert below query from My SQL to MS SQL Group_Concat function需要帮助将以下查询从 Mysql 转换为 MYSQL Group_Concat 函数
【发布时间】:2021-04-11 02:42:44
【问题描述】:

我需要帮助将下面的查询从我的 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  ;

【问题讨论】:

  • 什么是 md.ID?请至少显示一个在 mysql 中工作的查询

标签: mysql sql-server group-concat


【解决方案1】:

从 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

【讨论】:

  • 感谢您的回答,但我有 Sql server 2014 所以我将无法使用 String_AGG 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多