【问题标题】:Merge data in two row into one [duplicate]将两行中的数据合并为一个[重复]
【发布时间】:2012-06-29 03:38:25
【问题描述】:

可能重复:
Concatenate row values T-SQL

我是 SQL Server 的新手,我尝试了一些从互联网上建议的技术,例如使用临时变量、XML 路径、COALESCE 等,但都无法满足我的要求。

我正在使用 Toad for SQL Server 5.5 版创建 SQL 脚本,而我用来查询数据库服务器的帐户只有读取权限。因此我相信不能使用CREATE VIEW 声明。

表名:Customer

ServerName  Country  contact
----------  -------  -------------
srv1        SG       srv1_contact1
srv1        SG       srv1_contact2
srv1        SG       srv1_contact3
srv2        HK       srv2_contact1
srv2        HK       srv2_contact2
srv3        JP       srv3_contact1
srv3        JP       srv3_contact2
srv3        JP       srv3_contact3
srv4        KR       srv4_contact1

预期输出:

ServerName  Country  contact
----------  -------  -------------------------------------------
srv1        SG       srv1_contact1; srv1_contact2; srv1_contact3
srv2        HK       srv2_contact1; srv2_contact2
srv3        JP       srv3_contact1; srv3_contact2; srv3_contact3
srv4        KR       srv4_contact1

【问题讨论】:

  • 不确定视图有什么帮助。此外,如果您发布您尝试过的 XML 路径查询,我们可能会告诉您为什么它不符合您的要求(我们不知道“不知何故”是什么意思)。
  • 请参阅stackoverflow.com/questions/1874966/… 以获得更好的解决方案。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:
SELECT ServerName, Country, contact = STUFF((SELECT '; ' 
    + ic.contact FROM dbo.Customer AS ic
  WHERE ic.ServerName = c.ServerName AND ic.Country = c.Country
  FOR XML PATH(''), TYPE).value(N'./text()[1]', N'nvarchar(max)'), 1, 2, '')
FROM dbo.Customer AS c
GROUP BY ServerName, Country
ORDER BY ServerName;

【讨论】:

  • 感谢@Aaron 的回复。使用 XML PATH 时出现类似错误。错误消息“查找错误 - SQL Server 数据库错误:第 7 行:'XML' 附近的语法不正确。” **** MY XML PATH START HERE **** SELECT DISTINCT STUFF ((SELECT ', ' + contact FROM customer FOR XML PATH ('')), 1, 1, '') AS contact FROM customer ****我的 XML 路径到此结束 ****
  • 也许这是 TOAD 的问题,因为这看起来不像 SQL Server 错误(我测试了这段代码)。请尝试从 Management Studio 运行您的代码,或将您的代码放入存储过程并从 TOAD 调用 that
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2021-03-22
  • 2022-01-22
  • 1970-01-01
  • 2014-03-10
相关资源
最近更新 更多