Sql 将两行中的数据合并为一行

Sql 将两行中的数据合并为一行,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,可能重复: 我是SQL Server的新手,曾尝试过互联网上推荐的一些技术,如使用临时变量、XML路径、合并等,但都不符合我的要求 我正在使用Toad for SQL Server 5.5版创建SQL脚本,并且我用于查询DB Server的帐户仅具有读取权限。因此,我认为不能使用CREATEVIEW语句 表名:客户 预期产出: ServerName Country contact ---------- ------- ----------------------------------

可能重复:

我是SQL Server的新手,曾尝试过互联网上推荐的一些技术,如使用临时变量、XML路径、合并等,但都不符合我的要求

我正在使用Toad for SQL Server 5.5版创建SQL脚本,并且我用于查询DB Server的帐户仅具有读取权限。因此,我认为不能使用CREATEVIEW语句

表名:客户

预期产出:

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路径查询,我们可能会告诉您为什么它不符合您的要求,我们不知道这意味着什么。有关更好的解决方案集,请参阅。不确定视图有何帮助。此外,如果您发布了您尝试的XML路径查询,我们可能会告诉您为什么它不符合您的要求,我们不知道这意味着什么。有关更好的解决方案集,请参阅。感谢回复@Aaron。使用XML路径时出现类似错误。错误消息查找错误-SQL Server数据库错误:第7行:“XML”附近的语法不正确。“***”我的XML路径从这里开始****选择DISTINCT STUFF SELECT','+contact FROM customer FOR XML PATH,1,1,作为客户的联系人****我的XML路径在这里结束****这可能是TOAD的问题,因为这看起来不像SQL Server错误,我测试了此代码。请尝试从ManagementStudio运行代码,或者将代码放入存储过程中,然后从TOAD调用。谢谢回复@Aaron。使用XML路径时出现类似错误。错误消息查找错误-SQL Server数据库错误:第7行:“XML”附近的语法不正确。“***”我的XML路径从这里开始****选择DISTINCT STUFF SELECT','+contact FROM customer FOR XML PATH,1,1,作为客户的联系人****我的XML路径在这里结束****这可能是TOAD的问题,因为这看起来不像SQL Server错误,我测试了此代码。请尝试从ManagementStudio运行您的代码,或者将代码放入存储过程并从TOAD调用。
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
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('.','nvarchar(max)'), 1, 2, '')
FROM dbo.Customer AS c
GROUP BY ServerName, Country
ORDER BY ServerName;