5

可能重复:
将多行连接成一个文本字符串?

假设我有一个名为tblContractMail. 带有数据的示例表如下:

在此处输入图像描述

我需要编写一个产生以下输出的 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

有什么方法可以在单个查询中获得此输出(我的意思是不声明任何变量)?

4

1 回答 1

5

第一种方法依赖于变量,所以第一种方法的答案是否定的。

但是你可以很容易地使用没有变量的第二种方法,只需要稍微修改一下:

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

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

于 2012-06-03T04:15:58.603 回答