【问题标题】:Group_Concat with join equivalent in SQL SERVER在 SQL SERVER 中具有连接等效项的 Group_Concat
【发布时间】:2016-08-22 18:38:53
【问题描述】:

我的代码有问题。我曾经使用 MySQL,但我已将代码迁移到 SQL Server。

现在我遇到了这个 GROUP_CONCAT 函数的问题。我发现了一些“潜在的”等价物,但它并没有达到预期的效果。

这里是查询:

SELECT 
  GROUP_CONCAT(c.namecheck SEPARATOR '; ') AS GROUPNAME
FROM db_name a
left JOIN db_employee b ON a.nameId = b.empID
left join db_civ c ON b.nameNum = c.civNum

我尝试了一些。但正如我所说,它不会输出我所期望的结果(因为我在 MySQL 中反查查询)

预期的输出应该是

-----------
|GROUPNAME|
-----------
|Jay; Ron; Jorge .... etc|
|                        |
|                        |
|                        |

【问题讨论】:

  • 您的预期输出结果是什么?
  • 我会把它放在帖子里。我不会编辑它。
  • Aaron Bertrand 写了一个comparison,介绍了您可以使用的不同选项

标签: sql-server string-aggregation


【解决方案1】:

在 SQL Server 中,使用 FOR XML PATH 将行值连接成一个字符串。

CREATE TABLE states (id int, statename nvarchar(20))
INSERT states SELECT 1, 'Texas'
INSERT states SELECT 2, 'Florida'
INSERT states SELECT 3, 'California'

CREATE TABLE capitals (id int, cityname nvarchar(20))
INSERT capitals SELECT 1, 'Austin'
INSERT capitals SELECT 2, 'Tallahassee'
INSERT capitals SELECT 2, 'Sacramento'

--The wrapper removes the leading delimiter
SELECT STUFF((
    SELECT  DISTINCT '; ' + c.cityname  --Specify delimiter
    FROM    states s
    JOIN    capitals c ON c.id = s.id
    FOR XML PATH ('')                   --This does the concatenation
), 1, 1, '' )

输出是:

Austin; Sacramento; Tallahassee

对于您的示例,它将是:

--The wrapper removes the leading delimiter
SELECT STUFF((
    SELECT  DISTINCT '; ' + c.namecheck  --Specify delimiter
    FROM db_name a
    left JOIN db_employee b ON a.nameId = b.empID
    left join db_civ c ON b.nameNum = c.civNum
    FOR XML PATH ('')                   --This does the concatenation
), 1, 1, '' ) AS GROUPNAME

【讨论】:

  • 这段代码在MYSQL中的等价物是什么?是从州中选择 group_concat(cityname) 吗?
  • 我对 MYSQL 不是很熟悉,但最后一节使用您自己的代码展示了 FOR XML PATH 语法。它是否给了您期望的答案?
  • @WhiteMark 如果您的数据包含例如&<>,请注意FOR XML。请参阅this 问题。
猜你喜欢
  • 2013-10-07
  • 2013-05-13
  • 2012-05-07
  • 2013-05-03
  • 1970-01-01
  • 2011-04-30
  • 2023-03-07
  • 2020-07-22
  • 2015-03-27
相关资源
最近更新 更多