Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个SQL行选择为一行_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

将多个SQL行选择为一行

将多个SQL行选择为一行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,可能重复: 假设我有一个名为tblContractMail的表。数据示例表如下所示: 我需要编写生成以下输出的SQL查询: "abc@akij.net;efg@akij.net;hjk@akij.net" 我知道两种可能性: DECLARE @str varchar(4000) SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail SELECT @str 以及: 有没有办法在单个查询中获得此输出

可能重复:

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

我需要编写生成以下输出的SQL查询:

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

我知道两种可能性:

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


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

第一个方法依赖于变量,因此第一个方法的答案是否定的

但是,您可以轻松地使用第二种方法,无需变量,只需稍微修改:

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

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

请参阅此。是的,这个问题被重复了无数次。@PeterMajeed:是的,尽管从来没有人以这种特殊的形式问过它。@AndriyM:是的,谢谢分享-我从来都不知道你的答案是这样的。
SELECT 
  SUBSTRING(
    (SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')),
    2,
    2147483647
  )