将多个SQL行选择为一行

时间:2012-06-03 04:00:22

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

  

可能重复:
  Concatenate many rows into a single text string?

假设我有一个名为tblContractMail的表。样本表包含以下数据:

enter image description here

我需要编写一个产生以下输出的SQL查询:

  

'abc@akij.net; efg@akij.net; hjk@akij.net'

我知道两种可能性:

DECLARE @str varchar(4000)
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail 
SELECT @str

DECLARE @str varchar(4000)
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH(''))
SET @str = SUBSTRING(@str, 1, LEN(@str)-1)
SELECT @str

有没有办法在单个查询中获取此输出(我的意思是没有声明任何变量)?

1 个答案:

答案 0 :(得分:5)

第一种方法依赖于变量,因此第一种方法的答案是 no

但是你可以在没有变量的情况下轻松使用第二种方法,只需要稍微修改一下:

SELECT 
  SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')),
    2,
    2147483647
  )

如您所见,分隔符之前项目。结果,您开始从第二个字符切割字符串,省略前导分号。长度说明符不必精确地为长度减去1,您可以指定任何相当大的数字,并且该函数将返回从第二个字符到结尾的所有内容。在这种情况下,已指定最大int值。