问题描述
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 使用现代默认设置)。